DX11编程(二):向量代数

来源:互联网 发布:pdf分割软件 编辑:程序博客网 时间:2024/04/28 03:14

向量篇

计算机绘图、碰撞检测和物理模拟是现代视频游戏的基本组成部分,向量(vector)在这些领域中具有至关重要的作用。向量(vector)是一种同时具有大小和方向的物理量(quantity)。同时具有大小和方向的物理量称为向量值物理量(vector-valued quantity)。常见的向量值物理量有:力(在某个特定方向上施加一定的作用力——量值),位移(在某个净方向上移动一段距离),速度(速率和方向)。因此,向量可以用来表示力、位移和速度。有时我们也用向量来表示一个单个方向,比如玩家在3D游戏中的观察方向、多边形面对的方向、光线的传播方向以及从一个物体表面折回的反射光方向。

我们通过一个有向线段来表示向量,其中长度表示向量的大小,箭头表示向量的方向。向量所描绘的位置并不重要,改变向量的位置并不会影响向量的大小和方向(这是向量具有的两个属性)。也就是,当且仅当两个向量具有相同的长度和方向时,我们说这两个向量相等。其实,位置对于向量来说无关紧要,我们可以随便平移一个向量,但是不会改变该向量所表示的含义(因为平移即不会改变向量的长度,也不会改变向量的方向)。注意,我们可以平移u,使它与v重叠(反之亦然),由此使它们彼此难以区分——因为它们是相等的。

一、向量和坐标系

我们无法在计算机中以几何方式表示向量,我们必须寻求一种替代方案,以数字方式表示向量。所以我们在空间中引入了3D坐标系的概念,并将所有的向量尾部平移到坐标系原点(图1.2)。然后通过指定向量首部的坐标来表示一个向量,记作v= (x,y,z),如图1.3所示。现在,我们可以在计算机程序中用3个浮点数来表示一个向量了。
这里写图片描述
这里写图片描述

(要注意的是:不同的坐标系中,同一向量会有不同的坐标)

二、左手坐标系和右手坐标系

Direct3D使用所谓的左手坐标系(left-handed coordinate system)。假如你把左手手指指向x轴正方向,然后朝y轴正方向弯曲四指,大拇指就会指向z轴正方向。图1.5展示了左手坐标系和右手坐标系之间的区别。

这里写图片描述

三、 基本向量的运算

设u= (1,2,3)、v= (1,2,3)、w=(3, 0, −2)、k=2。则,
1.u+w= (1, 2,3) + (3, 0, −2) = (4, 2,1);
2.u=v;
3.u−v=u+ (−v) = (1,2,3) + (−1, −2, −3) = (0, 0,0) = 0;
4.kw=2(3, 0, −2) = (6, 0, −4)。

第3行例举了一个特殊的向量,称为零向量。零向量的所有分量均为零,它可以由0来表示。

四、向量的长度和单位向量

这里写图片描述

五、向量的点积

这里写图片描述

六、向量的叉积

这里写图片描述

七、向量和点

这里写图片描述

0 0