跳轉到內容

遊戲開發指南/理論/數學/向量

100% developed
來自華夏公益教科書
3D 向量的示例

向量用於儲存變數的多個分量,通常是空間維度的軸。因此,它們通常用於 2D 或 3D。

實際上,有兩種方法可以表示向量

2D
這可以定義為“旋轉和大小”或“x 方向上的位移和 y 方向上的位移”。
3D
這可以定義為“xz 方向上的旋轉、y 方向上的旋轉和大小”或“x 方向上的位移、y 方向上的位移和 z 方向上的位移”。

通常,在遊戲中,我們使用維度上的位移版本,而不是大小和旋轉。

向量可以有多種形式

i、j、k 形式 - 其中 i 表示 x 軸 上的 1 個單位j 表示 y 軸 上的 1 個單位,如果是在 3D 中,k 表示 z 軸 上的 1 個單位

2D 中,它看起來像這樣:,其中 3 表示 正 x 軸 上的 3 個單位4 表示 正 y 軸 上的 4 個單位

3D 中,它看起來像這樣:,其中 6 表示 正 x 軸 上的 6 個單位-3 表示 y 軸 上的 3 個單位5 表示 正 z 軸 上的 5 個單位


列向量 - 這是最常見的向量形式。

2D 中,它看起來像這樣:,其中 3 表示 正 x 軸 上的 3 個單位4 表示 正 y 軸 上的 4 個單位

3D 中,它看起來像這樣:,其中 6 表示 正 x 軸 上的 6 個單位-3 表示 y 軸 上的 3 個單位5 表示 正 z 軸 上的 5 個單位

行向量 - 這是最不常見的向量形式。

2D 中,它看起來像這樣:,其中 3 表示 正 x 軸 上的 3 個單位4 表示 正 y 軸 上的 4 個單位

3D 中,它看起來像這樣:,其中 6 表示 正 x 軸 上的 6 個單位-3 表示 y 軸 上的 3 個單位5 表示 正 z 軸 上的 5 個單位



在寫向量時,你可以用這種方式表示它

或只是

從一個位置到另一個位置(從 A 到 B)時,可以這樣寫

向量加減法

[編輯 | 編輯原始碼]

加向量就像加同類項一樣簡單。

加法
減法

注意:將常數加減到向量中是未定義的。

向量與常數的乘除(標量倍數)

[edit | edit source]

當一個常數乘以/除以一個向量時,你只需將該乘以/除以操作應用於向量的所有分量。

乘法
除法

當一個向量乘以另一個向量時,有兩種定義的向量乘法方式:向量點積向量叉積

單位長度向量

[edit | edit source]
二維中的單位向量基於此,這意味著x和y不能同時為1,否則它將不會形成一個圓,而是形成一個正方形,並且大小將大於1(一個單位)。

當大小不重要,只有方向重要時,使用單位向量。在二維中,它基於單位圓,在三維中,它基於單位球;x、y和z的值介於-1和1之間。

它的表示法是:

要將向量轉換為單位長度向量,請使用以下公式:,這被稱為歸一化向量。

零向量

[edit | edit source]

零向量(有時稱為零向量)是一個所有內容都是 0 的向量。如果零向量用 表示;

... 並且它在 2D 中,它看起來像:

... 並且它在 3D 中,它看起來像:

... 並且它在 D 中,它看起來像:

零位置向量的示例是原點;這是因為它有一個原點

另一個示例是,如果您想停止物體移動,您可以將 速度 設定為零向量。

大小

[edit | edit source]

由於向量由許多部分組成,因此用於每個維度的數字表示每個方向的距離。為了找到對角線穿過維度的點到點的距離,您需要找到向量的模。

二維向量的模由(根據勾股定理)給出

三維向量的模由給出

位置向量

[edit | edit source]

位置向量是一個被視為座標的向量,因此它是一個從原點到點的向量。字母O 通常用於表示原點。

位置向量可以寫成

等同於說有一個點 ,其座標為:

計算兩個位置向量之間的向量

[edit | edit source]

練習:找出這些位置向量之間的向量

已知 ,求

答案


點積

[edit | edit source]

點積有兩個公式

其中 是兩個向量之間的夾角。

兩個向量的夾角

[edit | edit source]

從這些公式,我們可以得到另一個計算它們之間夾角的公式

如果 ,則這意味著這兩個向量是垂直的。

要注意的是

標量投影

[edit | edit source]
參見:w:Dot_product#Scalar_projection_and_first_properties
標量投影

標量投影(或標量分量)是求一個向量(**A**)在另一個向量(**B**)上的投影的長度。

其中θ是**A**和**B**之間的夾角[1]

這個投影的向量(**A** 投影到 **B** 上)也可以用下面的公式求出[1]

向量方程

[edit | edit source]

一個基本的向量方程由一個向量和另一個向量的變數係數組成。獨立的向量被稱為位置向量,而帶有變數係數的向量被稱為方向向量。位置向量表示向量在3D空間中的位置,而方向向量表示向量指向的方向。位置向量的向量可以是直線上任何點的的位矢。

一個典型的方程可能看起來像這樣: 或者

檢查直線是否平行

[編輯 | 編輯原始碼]

當直線的方向向量是彼此的標量倍數時,這些直線是平行的。

示例

直線 1: 直線 2:

它們是平行的,因為 .

檢查一個點是否位於向量直線方程上

[編輯 | 編輯原始碼]

所以,如果該點的位置向量是 ,而直線方程是 ,並且你想看看 **P** 是否位於 **直線** 上,那麼你需要執行以下操作

將 **點** 等於 **方程**

從此你可以從每行建立 3 個獨立的方程

然後解出每個方程以找到 **t**

只有當所有 3 個 **t** 的值都相同時,**點** 才在 **直線** 上,因為其中一個 **t** 值與另外兩個不同,所以 **點** 不在 **直線** 上。

檢查兩個向量直線方程是否相交

[edit | edit source]

因此,在這個例子中,你需要兩條直線,直線 1: 和直線 2:

然後你需要將這兩個方程設為相等。

然後減去一組常數以將常數保留在一側。

由此,你可以從每一行建立一個方程

在找到 t 和 u 的值時,你只需要使用兩個方程,這樣你就可以檢查第三個方程是否匹配(在 2D 中不需要此檢查步驟)。我將使用方程 1 和方程 2: *使用任何你想要的聯立方程求解方法*

*將此方程的兩邊都乘以 2*


*得到方程 1,並從中減去方程 2*
求解得到u


u代回方程1
求解得到t

現在讓我們檢查一下它是否適用於最終方程式,將ut的值代入你沒有用過的方程式。

如果你得到一個等式表示式(一個常數等於它自身),這意味著它們相交,否則它們不相交。這被稱為斜交

直線方程上距離另一個點最近的點以及它們之間的距離

[edit | edit source]

假設有一個向量方程,並且有一個點P,其位置向量為:。我們想要找到直線上距離P最近的點的座標以及該點和P之間的距離。

我們將直線上的這個點稱為X

首先,我們需要使用我們的點積規則,因為從PX的直線將垂直直線本身。為此,我們需要找到直線的方向和從PX的向量。

直線的方向就是直線的方向向量(我們稱之為A):

至於PX的方向,我們需要先找到X,即使它用t表示。

X就是直線方程本身寫成一個向量
由此,我們可以使用“計算兩個位置向量之間的向量”找到用t表示的

現在我們有了兩個方向,就可以使用點積

現在我們有了t的值,可以將其代入的方程式中

,這就是我們一直在尋找的位置向量(X)。

至於PX之間的距離,我們需要將t代入我們的方程式中

這是我們的向量,現在我們只需要找到向量的長度/大小
, 這是 **點 P 到直線上最近點 X 的距離**。

叉積

[edit | edit source]
叉積 (左), 右手定則 (右)

叉積定義為: ,其中 它們之間的夾角,而 是一個 單位向量,它同時垂直於 。叉積只在 3 維和 7 維中有效 (你不需要 7 維版本)。

有兩個向量同時垂直於 A 和 B,一個指向頁面/螢幕外,另一個指向螢幕內。一個是 ,另一個是 。由於它們都指向不同的方向,並且大小相同,這意味著:。你可以使用 右手定則 來找到叉積向量的方向。

由於你的電腦沒有 "右手",你可以使用這個公式,它能做同樣的事情

[2]

法向量

[edit | edit source]

法向量是一個指向幾何體表面向外的單位長度向量。對於每塊平面幾何體,存在兩個法向量,一個直接向上(相對於表面),另一個直接向下(相對於表面),使得一個與另一個相反。

計算法向量

[edit | edit source]

要計算法向量,首先需要找到幾何體的一個角點。在該點處將有兩個邊延伸出來。你需要找到這兩條邊的向量。然後你需要找到邊 1 (E1) 和邊 2 (E2) 的叉積。之後你需要將向量歸一化使其單位長度。

重寫成一個方程

注意:從數學上來說,這更好,但在計算上更差,使用計算機時使用第一個版本來避免計算兩次叉積。這將需要儲存一個額外的變數,但對於處理器來說要容易得多。

要找到另一個法向量 (n2),可以使用以下任一方程

或者

參見

[edit | edit source]
[edit | edit source]

參考資料

[edit | edit source]
華夏公益教科書