参考的是《游戏和图形学的3D数学入门教程》,非常不错的书,推荐阅读,老外很喜欢把一个东西解释的很详细。
1.向量概念
具有方向和大小。没有位置观念。
一般的2D向量可以写成如[1,3]
- 平行向量(共线向量):方向相同或相反的非零向量。任意一组平行向量都可以移到同一直线上。零向量与所有向量平行。
- 相等向量:大小相等且方向相同的向量。相等向量经过平移后总可以重合。
2.3D中的向量
像下图中的向量可以写成[1,-3,7]
3.零向量
零向量是特殊的向量,他的大小是0,没有具体方向,可以说有任何一个方向。如下图。它跟普通的点又是不一样的。
4.一个向量取反
一些向量取反后的样子(我们可以看出一个向量取反就是改变它的方向,大小未变化).
5.计算向量的长度
向量长度就是数学中勾股定理的计算,还算比较简单。
- 向量的模:
向量的模指的是向量的大小(或长度)。
2D向量(x,y),模长是:
3D向量(x,y,z),其中x,y,z分别是三轴上的坐标,模长是
6.单位向量
长度为1的向量称为单位向量比如[1,0],[1,0,0]。
7.数与向量相乘
注意:一个数和向量相乘中间没有符号,只是紧挨在一起。在图形中更好的理解:
8.向量的规范化(Normalizing)
向量的规范化就是把向量的摸变为1,即变成单位向量。下面公式中的 ||v|| 就是一个向量的长度,
向量规范化在图形中的理解(黑色的向量就是规范化后的向量):
单位化(标准化)向量,就是将向量的大小(模)变为1。
一个向量除以它的模,得到单位向量。
2D向量标准化:
3D向量标准化:
9.向量之间的相加与相减
那么向量相加和相减在图形中又是怎么回事呢?我又想起了高中学的知识了
a+b=(x+x’, y+y’)
交换律:a+b=b+a
结合律:(a+b)+c=a+(b+c)
如果将第一个向量当作空间中的一个点,那么,第二个向量可理解为从该位置的位移或“跳跃”。例如,要在地面某位置找到一个单位大于 5 的点,可以使用以下方式进行计算:var pointInAir =pointOnGround + new Vector3(0, 5, 0);
如果向量代表力,则更为直观的理解方式是,将其视为含有各自方向和量值的力(量值是指力的大小)。将两个力向量相加所得的新向量即为两者力之和。通常,此概念在计算由多个分力同时作用的力时很有用(例如向前推进的火箭可能会受到侧风的影响)。
10.向量点积(Dot Product)
向量点积的结果有什么意义?事实上,向量的点积结果跟两个向量之间的角度有关
余弦值
两个向量都为单位向量时,余弦值实际上就是第一个向量在第二个向量上的射影长度(或反之亦然– 参数顺序不会影响结果)
a·b=|a|·|b|·cos<a,b>
(λa)·b=λ(a·b)
a·a=|a|的平方
a⊥b 〈=〉a·b=0
a·b=x·x’+y·y’
交换律:a·b=b·a
分配率:(a+b)·c=a·c+b·c
不满足结合律,即:(a·b)·c≠a·(b·c)
它的几何意义就是a的长度与b在a上的投影长度的乘积,或者是b的长度与a在b上投影长的乘积,它是一个标量,而且可正可负。
如果AB = 0,那么向量A和B垂直A⊥B
如果AB < 0,那么向量A和B之间的夹角α > 90°
如果AB > 0,那么向量A和B之间的夹角α < 90°
11.向量叉积(Cross Product)
两个向量a,b,它们的叉积表示为axb,这个很容易跟数学中两个数字之间的相乘,但是这里是完全不同的。
两个向量叉积在图形坐标中就很直观了,axb同时垂直与a和b。
我们很容易验证axb是否同时垂直a和b向量。根据向量乘积的知识,我们只需要计算下axb分别和a,b向量的乘积是否等于0。根据下面的计算确实等于0,这也可以用来验证我们平时向量叉积是否正确的方法。
叉积(外积、矢积、叉乘)的结果是一个垂直于两个输入向量的向量。叉积仅适用于三维向量,它输入两个向量,返回另外一个向量作为结果。
结果向量的量值等于两个输入向量量值相乘的结果再乘以两个向量形成角度的正弦值。
“左手坐标系”可用于根据输入向量的顺序表示输出向量的方向。如果第一个参数指向大拇指方向,第二个参数指向食指方向,则结果将指向中指方向。如果参数顺序相反,则结果向量将指向完全相反的方向,但其量值相同。
正弦值:
A = [x, y, z] B = [x, y, z]
A×B =[AyBz - AzBy, AzBx - AxBz, AxBy - AyBx]
(λa)×b=λ(a×b)=a×(λb)
分配律:a×(b+c)=a×b+a×c
不满足交换律,即:a×b ≠ b×a,实际为a×b = -b×a
∣a×b∣是以a和b为边的平行四边形面积
a×a=0
a垂直b〈=〉a×b=0
向量没有除法,即“a/b”是没有意义的。
平面法线
任何两个3D向量都可以确定一个平面,而平面法线就是一个垂直于该平面的向量,而且其长度为1。
平面法线 = (AB) / (||AB||),其实就是对AB进行的标准化后得到的一个模为1的向量。