一、向量(Vectors)
向量表示示意圖:
- 有序實數組,用以表示在不同坐標軸上的投影長度
- 有行和列兩種表達方式,在圖形學中常以列表達
- 代表了一個有方向的長度
- 基本運算:
- 加法(滿足結合律和交換律)
- 標量乘以向量(滿足結合律和分配率)
- 點乘(內積,結果為標量,幾何意義是 [公式] ,滿足分配率和交換律,可用於判斷兩向量夾角,求向量長度,計算投影等)
- 叉乘(外積,結果為向量,垂直於原向量構建的平面,長度為 [公式] ,交換叉乘中兩向量的位置,會得到長度相同但方向相反的向量)
- 向量歸一化:p的歸一化向量q與p方向相同,長度為1,可通過點乘算出
(一)向量歸一化
向量長度表示:\(||\vec a||\)
單位向量:
- 長度 = 1
- 計算公式:
- 可用於代表方向
(二)向量相加
向量相加示意圖:
- 幾何:遵守平行法則、三角法則
- 代數上:坐標相加
(三)笛卡爾積
向量相加示意圖:
X和Y可以是任何(通常是正交的單位)向量,
\(A = {x \choose y }\) \(A^T = \left(x,y \right )\) \(||A|| = \sqrt{x_2+y_2}\)
(四)向量相乘
1. 點乘
向量點乘示意圖:
\(\vec a \cdot \vec b = \left\| \vec a \right\| \left\| \vec b \right\| \cos \theta\) \(\cos \theta = \frac{\vec a \cdot \vec b}{\left\| \vec a \right\| \left\| \vec b \right\|}\)
對於單位向量:\(\cos \theta = \hat a \cdot \hat b\)
(1)點乘性質
\(\vec a \cdot \vec b = \vec b \cdot \vec a\)
\(\vec a \cdot \left( \vec b + \vec c \right) = \vec a \cdot \vec b + \vec a \cdot \vec c\)
\(\left( k \vec a \right) \cdot \vec b = \vec a \cdot \left( k \vec b \right) = k \left( \vec a \cdot \vec b \right)\)
(2)在笛卡爾坐標系中做點積
組合相乘,然后相加。
- 二維坐標系
- 三維坐標系
(3)投影點積
示意圖:
- \(\vec b_\bot\):\(\vec b\)在\(\vec a\)上的投影
- \(\vec b_\bot\)必須屬於\(\vec a\)(或者屬於\(\hat a\))
- \(\vec b_\bot = k \vec a\)
- 求k的值
- \(k = \left\| \vec b_\bot \right\| \cos \theta\)
- \(\vec b_\bot\)必須屬於\(\vec a\)(或者屬於\(\hat a\))
(4)圖形學中的點乘
- 求兩個向量的夾角,(例如:光源與表面夾角的余弦值)
- 求一個向量在另一個向量上的投影
應用
測量兩個向量的方向
1)在一個圓中
例如,圖中\(\vec a \cdot \vec b >0\)屬於前向(forward),\(\vec a \cdot \vec c <0\)屬於后向(backward)
2)兩個向量之間
(四)向量叉乘(Cross product)
向量叉乘示意圖:
- 叉乘正交於兩個原始向量
- 方向遵循右手法則,(一般默認是右手法則,即:\(\vec x \times \vec y = + \vec z\),但是OpenGL默認是左手法則,即:\(\vec x \times \vec y = - \vec z\))
- 可用於構建坐標系
1. 叉乘性質
2. 叉乘:笛卡爾法則
3. 圖形學中的叉乘
-
決定方向:左 or 右
兩個向量進行叉乘,比如:\(\vec a \times \vec b >0\),所以,\(\vec a\)在\(\vec b\)的順時針方向(也為:右邊);\(\vec b \times \vec a <0\),所以,\(\vec b\)在\(\vec a\)的逆時針方向(也為:左邊),如果\(\vec b \times \vec a = 0\),那么\(\vec a\)則與\(\vec b\)共線。后期如果更為細致,還可以用在游戲中判斷兩個物體的具體方位,比如以自身正對的方向,判斷敵人是在自己的左上、左下、右上、右下等位置 -
判斷內部 or 外部
如上圖,若\(P\)點在三角形內部,則從同一個端點出發的邊(eg:\(\vec{AB}\))與到\(P\)點的向量(eg:\(\vec{AP}\)),按此順序判斷(即邊向量順序連接),則P點只會在三條邊的同一個方向;若在外部,P點相對於三個邊的位置將不一致。
注:即使A、B、C調換順序,按照首尾連接,效果一致。此方法可應用在光線追蹤中。
- 建立坐標系
叉乘后的另一個向量必定與原來兩個向量垂直。
(五)標准正交基和坐標系(Orthonormal bases and coordinate frames)
1. 用途
- 對於表示點、位置、位置非常重要
- 通常有很多坐標系
- 全球、本地、世界、模型、模型部分(頭,手,…)
- 關鍵問題是在這正交基和坐標系之間進行轉換(見Lecture03筆記)
2. 直角坐標系
定義一個三維直角坐標系\((u,v,w)\):
\(\left\| \vec u \right\| = \left\| \vec v \right\| = \left\| \vec w \right\| = 1\)
\(\vec u \cdot \vec v = \vec v \cdot \vec w = \vec u \cdot \vec w = 0\)
\(\vec w = \vec u \times \vec v\) (右手法則)
\(\vec p = \left( \vec p \cdot \vec u \right) + \left( \vec p \cdot v \right) \vec v + \left( \vec p \cdot \vec w \right) \vec w\)(projection)
二、矩陣(Matrix)
在圖形學中,廣泛用於變換、旋轉、剪切、縮放等(詳見Lecture03筆記)
- 矩陣&標量值相乘/相加:每個元素相乘/相加。
- 矩陣&矩陣相乘:\(\left(M \times N \right) \left( N \times P \right)\),要求前一個的列數 = 后一個矩陣的行數。
矩陣&向量 相乘
- 把向量當做一個列矩陣\(\left( m \times \right)\)
- 關於y軸的2D反射
1. 矩陣轉置
-矩陣轉置的性質
2.單位矩陣和逆變換
\(I_{3 \times 3} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\)
\(AA^{-1} = A^{-1}A = I\)
\(\left( AB \right)^{-1} = B^{-1}A^{-1}\)
3. 矩陣形式中的向量相乘
- 點乘:
- 叉乘: