天天看點

Unity3D數學之向量基礎

向量 1)向量 是有大小和方向的有向線段,沒有位置。向量的大小就是向量的長度(模),向量有非負的長度。如“向前三步走”、“以50公裡/小時向北行駛”都是有方向有速度的向量。 向量沒有具體位置,但可以描述相對位置和位移。點用來描述位置。 任意一點都可以用從原點開始的向量來表達,如(3,5,1)即可以代表一個點,也可以代表從0,0,0指向該點的一個位移向量。 通過一個點或者兩個點都可以确定一個向量。 ---- 2)向量大小 為向量各分量平方和的平方根。代碼: dir.magnitude ---- 3)向量與标量。 标量強調數值,“速度、位移”等是向量;“速率、長度”等是标量。 ---- 4)标準化向量(法線) :許多向量我們不關注其大小隻關心其方向,如:“我面向的是什麼方向?”标準化(法線)向量即大小為1的向量(3D環境下為一個半徑為1的機關球)。代碼: dir.normalized。 向量标準化原理:将向量除以它的大小(模)即可。 ---- 5)向量乘法: ①标量與向量 不能相加,但可以 相乘 。結果仍為一個向量與原方向平行,但長度加倍,方向可能相反。如dir*3; ②向量與向量的乘法有兩種: 點乘: 點乘等于向量大小與向量夾角Cos值的積, 結果是一個标量 。點乘結果描述了兩個向量的“相似”程度。Vector3.Dot(M,N); a*b=||a||*||b||*Cos(α); 當設定a、b向量為機關向量時(a.forward,b.normalized)則a點乘b的值就是兩個向量的夾角Cos(α)的值(-1~1),當重疊時則夾角Cos(α)無限接近于1(0°)

Unity3D數學之向量基礎
Unity3D數學之向量基礎

叉乘: 叉乘僅可用于3D向量。和點乘不一樣,點乘得到一個标量并滿足交換律;叉乘 結果是一個向量 且不滿足交換律。叉乘得到的向量垂直于原來的兩個向量。 Vector3.Cross(M,N)==>||M||*||N||*Sin(α); 叉乘Vector3.Cross(M,N)與Vector3.Cross(N,M);的結果是不同的。在Unity中左手坐标系中,可以使用左手法則,以左手手掌指向M的方向,彎曲四指指向N的方向,此時拇指方向即為叉乘結果的方向,向下為負,向上為正。

Unity3D數學之向量基礎
Unity3D數學之向量基礎

叉乘最重要的應用就是建立垂直于平面、三角形或多邊形的向量。 ---- 6)向量加減: 向量加法滿足交換律:a+b=b+a;向量減法不滿足交換律:a-b=-(b-a); a+b等于使b的始點與a的終點重合時,以a的始點為始點,以b的終點為終點的向量。 a-b等于使b的始點與a的始點重合時,以b的終點為始點,以a的終點為終點的向量。

Unity3D數學之向量基礎
Unity3D數學之向量基礎

根據三角形法則得知, a-b得到的是一個從b到a的位移向量(表示在此方向上移動的一段距離) 。