3D Game基础——向量的基本知识

在游戏开发中,向量一般用来模拟既有大小又有方向的物理模型。
1、向量的表示(以3D空间中的向量为例):
     将向量u平移至其起点与坐标系原点重合(前提是平移后向量不变),则u =  (u x ,  u y ,  u z )
     
     简单的程序表示
     class Vector3D
     { 
     public:
          float x, y, z;
     };

2、4个特殊向量
     (1)零向量0 = (0, 0, 0):各个分量都为0
     (2)标准向量i = (1, 0, 0), j = (0, 1, 0), k = (0, 0, 1)

3、向量的相等:几何上,长度和方向都相等;数学上,维数和各个分量都相等;
     bool  Vector3D:: operator == (const Vector3D& v)
     {
          return this->x = v.x && this->y = v.y && this->z = v.z;
     }

4、向量的长度:|u| = sqrt( u x 2  + u y 2  + u z 2 )
    float  Vector3D::length()
     {
          return sqrt( u x *  u + u y *  u + u z *  u z );  
     }

5、向量的规范化(normalize):使向量的长度变成1:u(nor) =  (u  x /length(u),   u   y /length(u),   u z /length(u))
     Vector3D Vector3D::normalize()
     {
          return Vector3D(this->x / this->length(),  this->y / this->length(),  this->z / this->length());
     }

6、向量的相加(减):u + v = ( u x  +    v x , u y  +   v y , u z  +   v z )
     Vector3D Vector3D:: operator   + (const Vector3D& v)
     {
          return Vector3D(this->x + v.x, this->y + v.y, this->z + v.z);
     }

7、向量的数乘:ku =  (ku x ,  ku y ,  ku z )
     Vector3D Vector3D::operator * (float k)
     {
          return Vector3D(k * this->x, k * this->y, k * this->z);
     }

8、向量的点乘(数量积、内积): a·b =| a |·| b |·cos< a b>  or  u ·v =   u x *  v + u y *  v   + u z *  v z
        u ·v的结果是一个标量,若结果大于0,则两者夹角小于90°;若为0,则两者垂直;弱小于0,则大于90°。
     float Vector3DDot(const Vector3D* u, const Vector3D* v)
     {
          return u->x * v->x + u->y + v->y + u->z + v->z;
     }

9、向量的叉乘(向量积、外积):| a × b| =| a |·| b |·sin< a b>  or  u × v =  [(u y   v z  – u   z v y   ), (u z v  x  – u x v   z ), (u x   v y  – u   y v x   )]
      u × v的结果是一个向量,此向量垂直于u且垂直于v
     Vector3D Vector3DCross (const Vector3D* u, const Vector3D* v)
     {
          .....................
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值