了解向量运算

向量运算是制作三维图形、物理和动画的基础,深入了解向量运算有助于充分利用 Unity 的大部分功能。下方介绍了主要的向量运算方法,以及将向量运算用于多种用途时的建议。

加法

两向量相加的值等于将两个向量首尾相接,以原向量为“步长”相加所得的值。注意,参数顺序并不重要,因为无论顺序怎样,所得结果仍然相同。

如果将第一个向量当作空间中的一个点,那么,第二个向量可理解为从该位置的位移或“跳跃”。例如,要在地面某位置找到一个单位大于 5 的点,可以使用以下方式进行计算:

var pointInAir = pointOnGround + new Vector3(0, 5, 0);

如果向量代表力,则更为直观的理解方式是,将其视为含有各自方向和量值的力(量值是指力的大小)。将两个力向量相加所得的新向量即为两者力之和。通常,此概念在计算由多个分力同时作用的力时很有用(例如向前推进的火箭可能会受到侧风的影响)。

减法

向量减法通常用于获取从一个对象到另一个对象的方向与距离。注意,在减法中,两个参数的顺序影响结果:-

// The vector d has the same magnitude as c but points in the opposite direction.
var c = b - a;
var d = a - b;

和数字一样,加上一个负向量等于减去一个正向量。

// 两者所得结果相同。
var c = a - b;
var c = a + -b;

负向量的长度与原向量长度相同,两向量在同一直线上,方向相反。

标量乘法与除法

讨论向量时,我们通常将普通数值(如浮点值)称为标量。这表示,标量只有“比例”或量值之分,但向量包含量值和方向。

向量与标量的乘积是方向与原向量相同的向量。但是,新向量的量值等于原向量的量值与标量值的乘积。

同样地,标量除法是将原向量的量值除以该标量值所得的商。

当向量表示位移或力时,可使用这些运算。这可在不影响向量方向的同时改变其大小。

将任何向量除以其自身量值时,所得的商为量值为 1 的向量,我们将其称为标准向量。如果将标准向量乘以标量,乘积的量值等于该标量值。力的方向为常量但力量可控时,可使用此运算方法(例如,车轮上的力始终推动车轮向前移动,但其大小由传动器控制)。

点积

点积是将两个向量相乘得出一个标量的运算。此标量等于两个向量量值相乘的结果再乘以两个向量形成的角度的余弦值。两个向量都为单位向量时,余弦值实际上就是第一个向量在第二个向量上的射影长度(或反之亦然 – 参数顺序不会影响结果)。

这一点从角度方面考虑很容易理解,用计算器即可计算出相应的余弦值。下图所示的一些主要余弦值有助于您直观地了解此内容。

点积运算非常简单,可用于 Mathf.Cos 函数或在某些情况下计算向量量值(不是完全相同的两个事物,但有时候是等效的。)但是,点积计算所占用的 CPU 时间更少,因此,这是一个有价值的优化。

叉积

系统还为二维和三维向量定义了其他运算,并且包含任意维数的向量。相反,叉积仅适用于三维向量。它输入两个向量,返回另外一个向量作为结果。

结果向量垂直于两个输入向量。“左手坐标系”可用于根据输入向量的顺序表示输出向量的方向。如果第一个参数指向大拇指方向,第二个参数指向食指方向,则结果将指向中指方向。如果参数顺序相反,则结果向量将指向完全相反的方向,但其量值相同。

此结果的量值等于两个输入向量量值相乘的结果再乘以两个向量形成角度的正弦值。下方列出了一些有用的正弦函数:

由于叉积的返回值中包含一些有用信息,所以看起来比较复杂。但是,和点积一样,叉积是非常有效的数学运算,可用来优化代码,如果不使用叉积,则将依赖于缓慢的超越函数

Page last updated: 2013-06-27