一文讀懂矢量運(yùn)算

在游戲編程或者傳統(tǒng)三維軟件中,點(diǎn)和矢量是特別容易混淆的,因?yàn)樗鼈兊谋硎痉椒ǘ家粯?。比如一個(gè)點(diǎn)P,它的坐標(biāo)表示為P=(x,y,z),但是矢量的表示方法也是如此,那它們到底有什么區(qū)別呢?

點(diǎn)表示的是空間中的一個(gè)位置,它沒(méi)有方向、大小、長(zhǎng)度這類(lèi)的概念。

而矢量是一段包含了長(zhǎng)度(又叫做模)和方向的有向線(xiàn)段,它也經(jīng)常被稱(chēng)為向量。我們常說(shuō)的速度,就是一種典型的矢量。

與矢量形成對(duì)比的,叫做標(biāo)量。標(biāo)量是一種只有長(zhǎng)度、沒(méi)有方向的數(shù)學(xué)概念。生活中常提到的距離,它其實(shí)就是一種標(biāo)量。

在這里,我們主要了解矢量,因?yàn)樗灤┯谟螒蚓幊痰氖冀K。對(duì)于矢量來(lái)說(shuō),只有它的模和方向保持不變,無(wú)論放在任何位置,都是同一個(gè)矢量。比如說(shuō)下面的矢量a 和 矢量b,盡管它們?cè)谧鴺?biāo)系中的位置不同,但是它們的模和方向都是相同的,因此,它們是同一個(gè)矢量。矢量通常被用于表示相對(duì)于某個(gè)點(diǎn)的偏移。

矢量可以和矢量做運(yùn)算,也可以和標(biāo)量做運(yùn)算。

矢量和標(biāo)量的乘/除法

矢量和標(biāo)量的運(yùn)算比較簡(jiǎn)單,它們之間只能做乘除法,不能做加減法。矢量和標(biāo)量相乘,只需要矢量的每個(gè)分量和標(biāo)量相乘即可,而矢量除以標(biāo)量,相當(dāng)于乘以標(biāo)量的倒數(shù)。



從幾何意義來(lái)看,矢量乘以一個(gè)正標(biāo)量k,相當(dāng)于將矢量擴(kuò)大了k倍,方向不變;而乘以一個(gè)負(fù)標(biāo)量,矢量不僅擴(kuò)大了|k|倍,方向也會(huì)取反。


矢量的加/減法

兩個(gè)矢量相加減,只需要將每個(gè)矢量的對(duì)應(yīng)分量相加減即可,最后的結(jié)果是得到一個(gè)新矢量。


矢量的加減法,它表達(dá)的是偏移的幾何意義。

以加法為例,矢量a + 矢量b,它表示的是:一個(gè)點(diǎn),從a的起始位置出發(fā),便偏移了a,接著又偏移了b,就等同于進(jìn)行了一個(gè)a+b的位移。這里的矢量a、b,它們的首尾是相連的。

如果a、b首尾不相連,就變成了減法,a-b,表示的是a相對(duì)于b的偏移。


矢量的點(diǎn)積

矢量之間也可以進(jìn)行乘法,通常有兩種類(lèi)型:點(diǎn)積和叉積。先來(lái)說(shuō)說(shuō)點(diǎn)積。

矢量的點(diǎn)積有兩種公式,第一種是矢量之間對(duì)應(yīng)分量的乘積之和,也就是:


從公式可以看出,點(diǎn)積是滿(mǎn)足乘法交換律的,也就是a * b = b * a。

點(diǎn)積可以用來(lái)判斷兩個(gè)矢量之間的方向夾角關(guān)系。

如果 a * b > 0,說(shuō)明a和b是銳角關(guān)系;

如果 a * b = 0,說(shuō)明a和b是直角關(guān)系;

如果 a * b < 0,說(shuō)明a和b是鈍角關(guān)系;

在游戲編程中,也通常使用點(diǎn)積來(lái)計(jì)算投影,這和求矢量方向夾角是同一個(gè)道理。

另外,點(diǎn)積可以和標(biāo)量進(jìn)行乘法運(yùn)算,并且符合乘法的結(jié)合律。

點(diǎn)積還可以結(jié)合矢量加法做運(yùn)算,相當(dāng)于求點(diǎn)積之和。

一個(gè)矢量和本身進(jìn)行點(diǎn)積,結(jié)果是這個(gè)矢量模的平方。

這里有說(shuō)到矢量的模,它的求法等于矢量各分量的平方和開(kāi)根號(hào),即:

另外,模為1的矢量,被稱(chēng)為單位矢量,也叫做歸一化矢量。

矢量的第二種公式是:

矢量的叉積

矢量的另一種乘法運(yùn)算叫做叉積,和點(diǎn)積不同的是,叉積的結(jié)果仍然是一個(gè)矢量,而非標(biāo)量。

兩個(gè)矢量的叉積用a X b來(lái)表示,這個(gè)x號(hào)不同于數(shù)學(xué)的乘號(hào),這點(diǎn)不要混淆。叉積計(jì)算也有兩種公式,第一種是:

叉積不滿(mǎn)足交換律,即 a X b ≠ b X a,但它滿(mǎn)足反交換律,即a X b = -( b X a)

叉積也不滿(mǎn)足結(jié)合律,即 (a X b) X c ≠ a X (b X c)

從幾何意義來(lái)講,兩個(gè)矢量叉積的結(jié)果,會(huì)得到一個(gè)同時(shí)垂直于這兩個(gè)矢量的新矢量,這個(gè)新矢量的模很好計(jì)算,既可以通過(guò)模公式來(lái)得到,也可以通過(guò)矢量a、b以及他們之間的夾角θ來(lái)得到

對(duì)于新矢量的方向,它可能存在兩個(gè)完全相反的方向,要確定具體哪個(gè)方向,就要看使用的左手坐標(biāo)系還是右手坐標(biāo)系。

要求a X b 新矢量的方向,如果是左手坐標(biāo)系,伸直左手拇指微握其他四指,指背與矢量a方向垂直,四指彎曲方向朝矢量b靠攏,這是拇指指向的方向,就是新矢量的方向。

同樣地,如果是右手坐標(biāo)系,則伸出右手按照同樣的法則來(lái)判斷方向。

叉積在游戲編程中,經(jīng)常用于計(jì)算垂直于一個(gè)平面、三角形的矢量。另外,還可以用于判斷三角面片的朝向。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、笛卡爾坐標(biāo)系 二維笛卡爾 二維笛卡爾坐標(biāo)系包含兩個(gè)信息1.一個(gè)特殊的位置,即坐標(biāo)系的中心——原點(diǎn)。2.兩條過(guò)原...
    BacteriumFox閱讀 14,394評(píng)論 0 3
  • C2/目錄: 1.向量/矢量 vector 在物理專(zhuān)業(yè):向量只需滿(mǎn)足兩個(gè)條件:方向和大小。(可以隨便移動(dòng)) 線(xiàn)代:...
    大廠(chǎng)offer寶典閱讀 770評(píng)論 0 1
  • 矢量的表示 1.矢量的運(yùn)算 1.1 矢量的加法和減法 1.2 矢量與標(biāo)量scale的乘積 1.3 矢量的模(矢量的...
    yandaren閱讀 1,631評(píng)論 0 0
  • 點(diǎn)與矢量 簡(jiǎn)書(shū)不識(shí)別公式,有道云支持,后續(xù)修改 點(diǎn)(2維或3維) 坐標(biāo)系類(lèi)型根據(jù)實(shí)際情況選擇合適坐標(biāo)系笛卡爾坐標(biāo)系...
    龍遁流閱讀 710評(píng)論 0 0
  • 本文同時(shí)發(fā)布在我的個(gè)人博客上:https://dragon_boy.gitee.io 坐標(biāo)系 有左手坐標(biāo)系和右手坐...
    Dragon_boy閱讀 822評(píng)論 0 0

友情鏈接更多精彩內(nèi)容