0x00 向量
向量 ( vector ) 是一種兼具大小 ( magnitude ) 和方向的量。
0x01 幾何表示
幾何方法中用一條有向線段來表示一個向量,其中,線段長度代表向量的模,箭頭的指向代表向量的方向。
改變向量的位置不會改變其大小和方向,所以向量與其位置無關。當我們說兩個向量相等,當且僅當它們的長度相等且方向相同。
0x02 數學表示
數學中使用座標系來描述向量,通過平移操作將向量的尾部移動到原點,就可以通過座標來確定該向量。
每當我們根據座標來確定一個向量時,其對應的座標總是相對於某一參考系而言的。
標量和向量都可以用座標 (x, y, z) 來表示。但它們的意義截然不同:點僅表示位置,而向量表示大小與方向。
0x03 向量的基本運算
設有向量 \(u = (u_x, u_y, y_z)\) 和 \(v = (v_x, v_y, v_z)\):
- 兩個向量相等,當且僅當它們對應的分量分別相等。
- 向量加法:\(u + v = (u_x + v_x, u_y + v_y, u_z + v_z)\)。
- 標量乘法 ( scalar multiplication ),設 k 是一個標量,則 \(ku = (ku_x, ku_y, ku_z)\)。
- 向量減法:\(u - v = (u_x - v_x, u_y - v_y, u_z - v_z)\)。
- \((0, 0, 0)\) 稱為零向量 (zero-vector),可簡記為 0。
0x04 向量的長度和單位向量
向量的大小(即模)的幾何意義是對應有向線段的擦汗高難度,用雙豎線表示(如 \(||u||\))。
代數計算方法:\(\|u\| = \sqrt{x^2 + y^2 + z^2}\)
規範化 (normalizing) :
將向量的長度變為單位長度,將向量的每個分量分別除以該向量的模:\(\hat{u} = \frac{u}{\|u\|} = (\frac{x}{\|u\|},\frac{y}{\|u\|}\frac{z}{\|u\|})\)。
規範化又稱標準化、歸一化、正常化、規格化、正態化、單位化……不必拘泥於名詞譯法。
0x05 點積
點積 ( dot product ,也稱為數量積或內積 ) 是一種計算結果為標量值的向量乘法運算,因此也稱標量積 ( scalar product )。設 \(u = (u_x, u_y, y_z)\) 和 \(v = (v_x, v_y, v_z)\),則點積的定義為:\(u \cdot v = u_xv_x + u_yv_y + u_zv_z\)
點積的幾何意義是:\(u \cdot v = \|u\| \|v\| \cos{\theta}\)
點積的一些幾何性質:
- \(u \cdot v = 0\),那麼 \(u \perp v\) (即兩個向量正交)。
- \(u \cdot v \gt 0\),那麼兩向量之間的夾角 θ 小於 90°(即兩向量間的夾角為一銳角)。
- \(u \cdot v \lt 0\),那麼兩向量之間的夾角 θ 大於 90°(即兩向量間的夾角為一鈍角)。
正交 (orthogonal)與垂直(perendicular)為同義詞。
0x06 正交
給出向量 v 和單位向量 n,用點積公式求出 p。
因為 n 是單位向量,所以:\(p = (\|v\| \cos{\theta}) n = (v \cdot n)n\)。我們稱 p 為向量 v 落在向量 n 上的正交投影(orhogonal projection),通常將它表示為:\(p = proj_n(v)\)。
如果 n 不具有單位長度,就先對它進行規劃法處理,使之成為單位向量。可以得到更一般的投影公式:\(p = proj_n(v) = (v \cdot \frac{n}{\|n\|}) \frac{n}{\|n\|} = \frac{(v \cdot n)}{\|n\|^2}n\)。
如果向量集合中每個向量都是相互正交且皆具單位長度,我們就稱此集合是規範正交(orhonormal)的。
有一種常見的工作,將非規範正交集正交化。
1.2D 正交化處理
假設有一個向量集合 \(\{v_0, v_1\}\),現在要將它正交化為 \(\{w_0, w_1\}\)。首先設 \(w_0=v_0\),通過使 \(v_1\) 減去它在 \(w_0\) 上的分量來令它正交於 \(w_0\):\(w_1 = v_1 - proj_{w_0}(v_1)\)。
此時我們就得到一個元素相互正交的向量集合 \(\{w_0, w_1\}\);最後將其中的元素規範化為單位向量即可。
2.3D 正交化處理
與 2D 的處理方式類似,只不過要多一些步驟。
3.格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)
對於具有 n 個向量的一般集合 \(\{ v_0, ..., v_{n-1}\}\) 來說,基本步驟:
設 \(w_0 = v_0\),對於 \(1 \le i \le n - 1\),令 \(w_i=v_i - \sum_{j=0}^{i-1}proj_{w_j}(v_i)\)。
規範化步驟:令 \(w_i=\frac{w_i}{\|w_i\|}\)
將給定集合內的向量 \(v_i\) 新增到規範正交集中時,需要令 \(v_i\) 減去它在現有規範正交集中的其他向量方向上的分量,這樣可以確保新加入規範正交集的向量與該集合中的其他向量相互正交。
0x07 叉積
假設 3D 向量 u 與 v 的叉積為 w,則 w 與向量 u、v 彼此正交。
\(w = u \times v = (u_yv_z - u_zv_y, u_zv_x - u_xv_z, u_xv_y - u_yv_x)\)
通過叉積來進行正交化
流程如下:
- 令 \(w_0 = \frac{v_0}{\|v_0\|}\)。
- 令 \(w_2 = \frac{w_0 \times v_1}{\|w_0 \times v_1\|}\)。
- 令 \(w_1 = w_2 \times w_0\)。
此時,向量集 \(\{ w_0, w_1, w_2 \}\) 是規範正交的。