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

本文深入探讨了向量在游戏开发中的应用,包括向量的表示、特殊向量、相等判断、长度计算、规范化、加减运算、数乘、点乘、叉乘等核心概念,提供了一个全面的游戏开发向量基础知识概览。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在游戏开发中,向量一般用来模拟既有大小又有方向的物理模型。
1、向量的表示(以3D空间中的向量为例):
     将向量u平移至其起点与坐标系原点重合(前提是平移后向量不变),则u = (ux, uy, uz)
     
     简单的程序表示
     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(ux2 + uy2 + uz2)
    float Vector3D::length()
     {
          return sqrt(ux * u+ uy * u+ uz * uz); 
     }

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

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

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

8、向量的点乘(数量积、内积):a·b=|a|·|b|·cos<ab> or u·v = ux * v+ uy * v + uz * vz
       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<ab> or u×v = [(uy vz – u zvy ), (uzv x – uxv z), (ux vy – u yvx )]
     u×v的结果是一个向量,此向量垂直于u且垂直于v
     Vector3D Vector3DCross(const Vector3D* u, const Vector3D* v)
     {
          .....................
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值