三维向量类

原创 2011年01月10日 15:19:00

      还是在读书的时候帮外专业朋友做作业,用GDI实现三维空间的立方体绘制和旋转的操作,那个时候自己根据《线性代数与空间解析几何》以及《计算机图形学》等课程的相关知识写了一个三维向量类。后来做了些二维和三维的东西发现用向量操作会使很多问题变得简单直观,尤其是在OpenGL编程的时候这种感觉尤为明显。经过这么长时间的使用现在这个类已经比较完善了,早些时候将它上传到了CSDN,近来比较闲索性写个介绍吧,希望对从事三维图形开发的朋友有所帮助,也期待着与大家的交流中会有所提高。

      先把代码贴上,当然有兴趣的朋友也可以在我的资源中下载

      类的定义是这样的

      大家应该都知道所谓向量其实就是一组数,在笛卡尔坐标系中一个向量就是起点在原点的有向线段,虽然向量的起点可以在任意位置,但是标记向量的有序数却还是当起点在原点时终点的坐标。所以m_fVectorX, m_fVectorY, m_fVectorZ就唯一确定了一个向量。当然向量还有一些其他属性,比如模(也就是向量的长度),比如其和各个坐标轴的夹角,所以我做了另外四个变量m_fMod、m_fAngleX、m_fAngleY、m_fAngleZ来保存这些属性。

      生成变量有很多方法,比如直接设置终点坐标、比如通过起点和终点做差,所以我也实现了两个版本的SetVector。当然也有通过模和角度来生成变量的,但这种方法极其不常用,尤其是在三维条件下这个角度其实很不容易计算,所以我也就没有实现相应的方法。获取向量的模是常用的向量操作,我自然也对其进行了实现,GetMod就是返回模的函数。和矢量有关的操作中反向也是比较常用的一个,我也用Invert实现了这个操作。具体应用时,我们可能经常会用到单位向量,MakeUnitVector的功能就是将当前向量变成单位向量。最值得一提的就是Rotate函数,有过三维制作经验的人都应该知道在三维空间中旋转操作是最让人头疼的了,需要进行繁琐的矩阵运算。根据实际使用的经验,我实现了简单易用的Rotate函数,第一个参数fAngle用于指定旋转角度,而第二个参数vtrAxis用于指定旋转轴。这样通过调用这个函数我们就可以轻松实现任意的旋转操作,也可以初始向量到一个特殊方向,通过旋转达到指定方向,这样也省掉了自行计算复杂向量初始参数的麻烦。当然作为一个数学操作单元重载操作符是必须的,加、减、赋值不必多说,向量乘法有两种,叉积和内积,我通过“*”实现了叉积运算而通过“^”号实现了内积运算。各个向量操作主要都是通过坐标实现的,而某些操作实现之后需要相应的修正其他参数,CalculateAngles函数就是重新计算新向量的角度参数的,使用在各个函数的内部。以下是这个类的实现代码:

      我在网上也看过一些向量类,多半只是有坐标参数,没有相应操作。这个类体现出了向量的所有属性,而且封装了我能想到的向量的所有常用操作。尤其是旋转操作功能比较全面,在我实际的三维编程应用中也有很好的效果。这次拿出来和大家分享,希望大家多提宝贵意见。

相关文章推荐

SURF与SIFT比较

文章来自:http://blog.163.com/sn404417391@126/blog/static/126688605201111623714283/ 共同点: SIFT/SURF为了实现不...
  • redcp
  • redcp
  • 2016年10月03日 13:20
  • 419

图像相似度测量和模板匹配方法

摘要 本文主要总结了进行目标跟踪、检测中经常使用到的图像相似度测量和模板匹配方法,并给出了具体的基于OpenCV的代码实现。 引言 模板匹配是一种在源图像中寻找与图像patch最相似的技...

java 三维向量类 分装了部分向量相关函数 欢迎补充

java 三维向量类 分装了部分向量相关函数 欢迎补充 (提供平面求垂直向量 向量旋转 向量求膜 向量转单位向量等函数)...

向量类(综合型题目)

  • 2011年11月14日 10:45
  • 25KB
  • 下载

Vector3——简单的3D向量类

  • 2015年05月08日 11:07
  • 3KB
  • 下载

AS3 没有2D向量类,自己随手写个简化版的先用着

用不着,叉乘、点乘,暂时写这么多,之前自己写的一个比较详细的,放在家了,目前要用这个简化版的: package model { /** * 简化版向量类 * @author Jav...

n维向量类(C++)

  • 2012年12月05日 18:52
  • 250KB
  • 下载

c++实现任意维数向量类的操作

  • 2009年11月01日 16:27
  • 1022KB
  • 下载

向量类的实现

向量在实现图形学的算法中有很重要的位置 ,下面是 用C++写的一个向量类,实现了一些 基本的 向量操作。 代码清单: gvector3.h #ifndef GVECTOR3_H #define ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三维向量类
举报原因:
原因补充:

(最多只允许输入30个字)