1.向量
1.1 什么是向量
向量指的是具有大小(Magnitude)和方向(Direction)量。在物理学中也称为矢量。向量的表示通常使用小写字母上面加上向右的箭头 → 表示,例如a;或者使用粗体的小写字母表示,例如 a。向量具有平移不变形。向量只与大小和方向有关系,和向量的起点和终点没有关系。向量也只包含两个属性:大小和方向。对于空间中的两个点 𝐴 和 𝐵,从 𝐴 到 𝐵 的向量可以表示为 ⃖⃖⃖⃖⃗ 𝐴𝐵,计算方法为 ⃖⃖⃖⃖⃗ 𝐴𝐵 = 𝐵 − 𝐴。
1.2 向量归一化
向量的大小(长度)称为向量的模(norm),一般记作
单位向量(Unit vector)指的是模为 1 的向量。单位向量的计算公式为:
单位向量的长度为 1,一般只用来表示方向。
1.3 向量求和
向量的求和可以用两种法则:平行四边形法则或者三角形法则。
两个向量相加时,以表示这两个向量的线段为邻边作平行四边形,这两个邻边之间的对角线就代表向量和的大小和方向,这就叫做平行四边形定则(Parallelogram law)。
**三角形法则(Triangle law)**是指两个向量,将一个向量的起点移动到另一个向量的终点时,向量和为从未移动向量的起点指向所移动向量的终点的向量。三角形法则适用于多个向量求和,只需要将向量按照相加顺序依次首尾排列,第一个向量的起点指向最后一个向量的终点的向量就是求和的结果。在代数上,对于在笛卡尔坐标系中定义的向量,向量求和可以简化为求向量各个对应坐标值的和。
1.4 笛卡尔坐标系
在数学里,笛卡尔坐标系 (Cartesian coordinate system),亦称直角坐标系,是一种正交坐标系。二维的直角坐标系是由两条相互垂直,相交于原点的数线构成的。在平面内,任何一点的坐标是根据数轴上对应的点的坐标设定的。对于向量,我们认为所有向量都是以原点为起点,那么终点的坐标就可以表示一个唯一的向量。
在计算机图形学中,我们默认所有的向量都是列向量,用符号表示向量,向量的转置以及向量的模如下:
1.5 向量乘法
点乘
点乘(Dot product),又称为向量的内积。计算公式为:
点乘满足交换律以及分配律。
在笛卡尔坐标系下点乘的计算结果是逐坐标元素相乘后相加的结果
点乘的应用:
-
计算两个向量的夹角;
通过原公式我们可以推出:
当两个向量都是单位向量时,我们可以得出更为简单的公式:
我们可以求出两个向量夹角的余弦值,从而得到两个向量的夹角大小。 -
计算一个向量到另一个向量上的投影
向量b在向量a上的投影满足:
𝑘 的大小为:𝑘 = ||𝑏⟂|| = ||𝑏|| cos𝜃. 已知两个向量的内积,一个向量在另一个向量上的投影长度为
-
计算两个向量的接近程度;
根据 cos 在角度 [0, 𝜋 ] 之间的值可以得出结论,越接近(夹角比较小)的两个向量的单位向量点乘结果越接近于 1,反之越远离(夹角比较大)的两个向量的单位向量点乘结果越接近于-1 -
计算两个向量的方向是相同还是相反的。
首先我们定义两个向量的方向相同或者相反。如图所示,向量a 以其垂线为分界,在上半部分(上半圆)
的向量认为和向量a方向基本相同,在下半部分(下半圆)的向量认为和向量a方向基本相反。
叉乘
叉乘(Cross product),又称作向量的外积。两个向量叉乘的结果还是一个向量,这个向量和原来的两个向量垂直。叉乘的结果向量的长度为:
结果向量的方向满足右手定则. 右手定则指的是,使用右手的四指从第一个向量到第二个向量握拳,大拇指指向的方向是叉乘结果向量的方向。因此叉乘不满足交换律
叉乘满足分配律,以及数乘结合律。向量自己和自己的叉乘结果是 0.
在笛卡尔坐标系的表示下进行叉乘计算的结果可以写作
我们可以将向量a写成等价的矩阵形式
叉乘的应用
-
判断一个向量在另一个向量的左边还是右边;
一个向量对另一个向量做叉乘,如果说结果方向为正,那么另一个向量在这个向量的右边。如果结果为负,那么在左边。 -
判定一个点在三角形的内部还是外部。
只要 P 点在边 AB,BC,AC(注意输入顺序)的左边,那么就满足 P 点在三角形 ABC 中。那么可以对每个边分别求一次叉乘判断点是否在三角形内部。三角形的输入必须保证为顺时针或者逆时针。为了忽略顺时针和逆时针的差别(顺时针输入需要要求点在三角形每一条边的右边),只要 P 在都在每条边的左边或者每条边的右边都算作在三角形内部。对于边界情况(如果叉乘结果为 0),那么由自己根据实际问题定义这是内部还是外部