Unity-了解矢量算術(shù)
矢量算術(shù)是 3D 圖形、物理和動(dòng)畫的基礎(chǔ),深入了解這一主題對(duì)于充分發(fā)揮 Unity 的功能很有幫助。以下是主要運(yùn)算的說明以及有關(guān)它們的用途的一些建議。
添加
當(dāng)兩個(gè)矢量相加時(shí),結(jié)果相當(dāng)于將原始矢量依次作為“步驟”。請(qǐng)注意,兩個(gè)參數(shù)的順序無關(guān)緊要,因?yàn)閮煞N方式的結(jié)果都相同。

如果將第一個(gè)矢量視為空間中的一個(gè)點(diǎn),那么第二個(gè)矢量可以解釋為從該位置的偏移或“跳躍”。例如,為了找到地面上某個(gè)位置上方 5 個(gè)單位的點(diǎn),可使用以下計(jì)算:
var pointInAir = pointOnGround + new Vector3(0, 5, 0);
如果矢量代表力,那么從力的方向和大小來考慮它們將會(huì)更直觀。兩個(gè)力矢量相加會(huì)產(chǎn)生一個(gè)等于力的組合的新矢量。施加的力同時(shí)有若干單獨(dú)分量起作用時(shí)(例如,向前推進(jìn)的火箭還可能受到側(cè)風(fēng)影響),此概念通常很有用。
減法
矢量減法通常用于獲取從一個(gè)對(duì)象到另一個(gè)對(duì)象的方向和距離。請(qǐng)注意,兩個(gè)參數(shù)的順序?qū)τ跍p法很__重要__:

// 矢量 d 的大小與 c 相同,但指向相反的方向。
var c = b - a;
var d = a - b;
與數(shù)字一樣,與負(fù)向矢量相加相當(dāng)于減去正向矢量。
// 這兩者得出相同的結(jié)果。
var c = a - b;
var c = a + -b;
負(fù)向矢量的大小與原始矢量相同并沿著同一條線指向,但在完全相反的方向上。
標(biāo)量乘法和除法
在討論矢量時(shí),通常將普通數(shù)(例如,浮點(diǎn)值)稱為標(biāo)量。這意味著標(biāo)量只有“標(biāo)度”或大小,而矢量兼具大小和方向。
將矢量乘以標(biāo)量會(huì)產(chǎn)生與原始矢量方向相同的矢量。但是,新矢量的大小等于原始大小乘以標(biāo)量值。
同樣,標(biāo)量除法將原始矢量的大小除以標(biāo)量。
當(dāng)矢量表示移動(dòng)偏移或力時(shí),這些運(yùn)算很有用。通過這些運(yùn)算可以更改矢量的大小而不影響其方向。
當(dāng)任何矢量除以其自身的大小時(shí),得到的結(jié)果是大小為 1 的矢量,即所謂的歸一化矢量。如果歸一化矢量乘以標(biāo)量,則結(jié)果的大小將等于該標(biāo)量值。當(dāng)力的方向恒定但強(qiáng)度可控時(shí)(例如,來自車輪的力總是向前推動(dòng),但是動(dòng)力由駕駛員控制),這會(huì)很有用。
點(diǎn)積
點(diǎn)積取兩個(gè)矢量并返回標(biāo)量。該標(biāo)量等于兩個(gè)矢量相乘的大小,得到的結(jié)果再乘以矢量之間角度的余弦。當(dāng)兩個(gè)矢量都被歸一化時(shí),余弦本質(zhì)上表示第一個(gè)矢量在第二個(gè)矢量的方向上延伸的距離(反之亦然 - 參數(shù)的順序無關(guān)緊要)。

想象成角度再使用計(jì)算器找到相應(yīng)的余弦,這種處理方式比較容易。但是,還有一種有用的方法可以直觀了解一些主余弦值,如下圖所示:

點(diǎn)積是一種非常簡(jiǎn)單的運(yùn)算,在某些情況下可用于代替 Mathf.Cos 函數(shù)或矢量大小運(yùn)算(功能不完全相同但有時(shí)效果相同)。但是,計(jì)算點(diǎn)積函數(shù)所需的 CPU 時(shí)間要少得多,因此可作為一種有價(jià)值的優(yōu)化。
差積
其他運(yùn)算是針對(duì) 2D 和 3D 矢量甚至任意維度的矢量定義的。相比之下,差積僅對(duì) 3D 矢量有意義。它需要兩個(gè)矢量作為輸入,并返回另一個(gè)矢量作為結(jié)果。
結(jié)果矢量垂直于兩個(gè)輸入向量。可使用“左手規(guī)則”根據(jù)輸入矢量的排序確定輸出矢量的方向。如果第一個(gè)參數(shù)對(duì)應(yīng)于手的拇指,而第二個(gè)參數(shù)對(duì)應(yīng)于食指,則結(jié)果將指向中指的方向。如果參數(shù)的順序顛倒,得到的矢量將指向完全相反的方向,但大小相同。

結(jié)果的大小等于輸入矢量的大小相乘,然后該值再乘以二者之間角度的正弦。正弦函數(shù)的一些有用值如下所示:

差積看起來很復(fù)雜,因?yàn)樗诜祷刂抵薪Y(jié)合了多方面的有用信息。然而,就像點(diǎn)積一樣,它在數(shù)學(xué)上的效率非常高,可用于優(yōu)化代碼,否則這些代碼將不得不依賴于緩慢的超越函數(shù)。