向量是2D、3D數(shù)學研究的標準工具,在3D游戲中向量是基礎。
一、向量
1、向量的數(shù)學定義
- 向量就是一個數(shù)字列表,對于程序員來說一個向量就是一個數(shù)組。
- 向量的維度就是向量包含的“數(shù)”的數(shù)目,向量可以有任意正數(shù)維,標量可以被認為是一維向量。
2、向量的幾何意義
幾何意義上說,向量是有大小和方向的有向線段。向量的大小就是向量的長度(模)向量的長度為非負。
向量的方向描述了空間中向量的指向。
-
向量的形式:向量定義的兩大要素——大小和方向,有時候需要引用向量的頭和尾,下圖所示,箭頭是向量的末端
向量.png 屬性
[x]//向量的X組件。
[y]//向量的Y組件。
[z]//向量的Z組件。
[this [int index]]//使用[0], [1], [2]分別訪問組件x, y, z組件。簡單來說就是用索引號代替x, y, z組件。
[normalized]//返回向量的長度為1(只讀)。
[magnitude]// 返回向量的長度(只讀)。
[sqrMagnitude]//返回這個向量的長度的平方(只讀)。
- 方法
[Lerp]兩個向量之間的線性插值。
[Slerp]球形插值在兩個向量之間。
[OrthoNormalize]使向量規(guī)范化并且彼此相互垂直。
[MoveTowards]當前的地點移向目標。
[RotateTowards]當前的向量轉向目標。
[SmoothDamp]隨著時間的推移,逐漸改變一個向量朝向預期的目標。
[Scale]兩個矢量組件對應相乘。
[Cross]兩個向量的交叉乘積。返回lhs x rhs
[Reflect]沿著法線反射向量。
[Dot]兩個向量的點乘積。
[Project]投影一個向量到另一個向量。
[Angle]由from和to兩者返回一個角度。
[Distance]返回a和b之間的距離。
[ClampMagnitude]返回向量的長度,最大不超過maxLength所指示的長度。
[Min]返回一個由兩個向量的最小組件組成的向量。
[Max]返回一個由兩個向量的最大組件組成的向量。
1、零向量
Vector3.zero
零向量非常特殊,因為它是唯一大小為零的向量。零向量也是唯一一個沒有方向的向量。2、負向量
-Vector3
向量變負,將得到一個和向量大小相等,方向相反的向量。3、向量大?。ㄩL度或模)
Vector3.magnitude
在線性代數(shù)中,向量的大小用向量兩邊加雙豎線表示,向量的大小就是向量各分量平方和的平方根
(2D向量v) |v|=√(x^2 + y^2)
(3D向量v) |v|=√(x^2 + y^2 + z^2)4、向量的數(shù)乘
Vector3*num
雖然標量與向量不能相加,但它們可以相乘。結果將得到一個向量。與原向量平行,但長度不同或者方向相反。標量與向量的乘法非常直接,將向量的每個分量都與標量相乘即可。
如:k[x,y,z] = [xk,yk,zk]5、標準化向量
Vector3.Normalize()
對于許多向量,我們只關心向量的方向不在乎向量的大小,如:“我面向的是什么方向?”,在這樣的情況下,使用單位向量非常方便,單位向量就是大小為1的向量,單位向量經(jīng)常也被稱作為標準化向量或者法線。
對于任意非零向量v,都能計算出一個和v方向相同的單位向量k,這個過程被稱作向量的“標準化”,要標準化向量,將向量除以它的大小(模)即可。 k=v/||v||,v!=0;6、向量的加法和減法
+、-
兩個向量的維數(shù)相同,那么它們能相加,或者相減。結果向量的維數(shù)與原向量相同。向量加減法的記發(fā)和標量加減法的記法相同。例如:[x,y,z] + [a,b,c] = [x+a,y+b,z+c]7、距離公式
Vector3.Distance()
距離公式用來計算兩點之間的距離。通過向量減法可以得知,既然得到了兩點間的位移向量,那么求出位移向量的模,就能計算出兩點間的位移。8、向量點乘
Vector3.Dot()
向量除了可以數(shù)乘,向量和向量也可以相乘。有兩種不同類型的乘法,點乘、叉乘點乘的記法來至a·b中的點。與標量和向量的乘法一樣,向量點乘的優(yōu)先級高于加法和減法。標量乘法和標量與向量的乘法可以省略乘號,但在向量點乘中不能省略點乘號。向量點乘就是對應分量乘積的和。其結果是一個標量. [x,y,z] · [a,b,c] = ax+by+cz;
幾何解釋:一般來說,點乘結果描述了兩個向量的“相似”程度,點乘結果越大,兩個向量越相近,點乘和向量間的夾角相關 ,計算兩向量間的夾角 θ = arccos(a·b)
9、向量叉乘
Vector3.Cross()
向量叉乘得到一個向量,并且不滿足交換律。 它滿足反交換律 a × b = -(b × a)
叉乘公式:[x,y,z] × [a,b,c] = [yc-zb , za-xc , xb-ya]
當點乘和叉乘在一起時,叉乘優(yōu)先計算, a · b × c = a·(b×c) 因為點乘返回一個標量,同時標量和向量間不能叉乘。
幾何解釋:叉乘得到的向量垂直于原來的兩個向量。
a × b 的長度等于向量的大小與向量夾角sin值的積,|a × b| = |a| |b| sinθ
|a × b|也等于以a和b**為兩邊的平時四邊形的面積。
叉乘最重要的應用就是創(chuàng)建垂直于平面、三角形、多邊形的向量。9、向量投影
Vector3.Project()
給定兩個向量v和n,能夠將v分解成兩個分量, 它們分別垂直和平行于向量n,并且滿足 兩向量相加等于向量v,一般稱平行分量為v在向量n上的投影。
平行分量公式:平行分量 = n(v·n)/|n|^2
垂直分量公式:垂直分量 = |v| – n(v·n)/|n|^2
