前往
大廳
主題

02. 旋轉3D向量的方法 - 四元數與幾何代數

Lumi | 2022-07-23 23:02:46 | 巴幣 0 | 人氣 288

在往下看之前,請先確保你是使用PC觀看,且讓巴哈姆特能顯示數學式。若不熟悉幾何代數,建議先看上一篇熟悉一下外積、幾何積等性質。


在上一篇"旋轉2D向量的方法"中,我們知道使用複數來旋轉時,當中的虛數$i$以幾何代數的觀點來看其實是平面。四元數也是一樣,三個虛數$i$、$j$、$k$在幾何代數中分別代表三個單位平面,不過知道這件事也無法增加多少理解。下面先介紹幾何代數旋轉的原理,再來比較與四元數的差別。



向量鏡射

在幾何代數中,所有正交變換都可以視為多個鏡射(reflection)的組合。旋轉是一種正交變換,所以要解釋旋轉得先解釋鏡射。

這裡先看看線性代數的公式長什麼樣子。設有一向量$\textbf{u}$和與該向量垂直的平面,求向量$\textbf{a}$在平面另一邊的鏡像。我們需計算向量$\textbf{a}$在$\textbf{u}$上的正交投影$\dfrac{(\textbf{a}\cdot \textbf{u}) \textbf{u}}{\lVert \textbf{u} \rVert^2}$,然後$\textbf{a}$減去兩倍該向量即為答案$\textbf{a} - 2\dfrac{(\textbf{a}\cdot \textbf{u}) \textbf{u}}{\lVert \textbf{u} \rVert^2}$,如下圖:
▲鏡射示意圖

要推導幾何代數的公式,我們需要兩個數學性質,第一個是內積與幾何積的關係。從兩向量以不同先後順序求幾何積開始:
$$\begin{aligned}
\textbf{au} &= \textbf{a}\cdot\textbf{u} + \textbf{a} \wedge \textbf{u} \\
\textbf{ua} &= \textbf{a}\cdot\textbf{u} - \textbf{a} \wedge \textbf{u} \\
\end{aligned}$$
上下兩式相加除以2可以消除外積的項,於是得到第一個性質:
$$\textbf{a} \cdot \textbf{u} = \dfrac{1}{2}(\textbf{au} + \textbf{ua}) $$
第二個性質是乘法反元素。在歐幾里得空間中,向量只要長度不為0就是可逆的。$\mathbf{u}$的乘法反元素為$\textbf{u}^{-1} = \dfrac{\textbf{u}}{\lVert \textbf{u} \rVert^2}$,其中$\lVert \textbf{u} \rVert^2 = \textbf{u} \cdot \textbf{u} = \textbf{u} \textbf{u}$。從這個式子還可以看出,單位向量的乘法反元素就是自身。

把上述性質都代入線代的鏡射公式中:
$$
\begin{aligned}
\textbf{a} - 2\dfrac{(\textbf{a}\cdot \textbf{u}) \textbf{u}}{\lVert \textbf{u} \rVert^2}
&= \textbf{a} - ( \textbf{au} + \textbf{ua}) \textbf{u}^{-1} \\
&= \textbf{a} - \textbf{auu}^{-1} - \textbf{uau}^{-1} \\
&= \textbf{a} - \textbf{a} - \textbf{uau}^{-1} \\
&= - \textbf{uau}^{-1} \\
\end{aligned}
$$
可看到公式被簡化成向量$\mathbf{a}$被夾起來的三明治構造。

向量旋轉

旋轉是偶數次的鏡射,接續上一個鏡射例子,增加向量$\textbf{v}$和與$\textbf{v}$垂直的平面。欲計算向量$-\textbf{uau}^{-1}$對該平面的鏡射,套用鏡射公式會得到:
$$
\begin{aligned}
-\textbf{v}(-\textbf{uau}^{-1}) \textbf{v}^{-1}
&= \textbf{v}\textbf{uau}^{-1}\textbf{v}^{-1} \\
&= (\textbf{vu})\textbf{a}(\textbf{vu})^{-1} \\
\end{aligned}
$$
如此一來相當於將向量$\textbf{a}$旋轉至$(\textbf{vu})\textbf{a}(\textbf{vu})^{-1}$。若旋轉角度是$\theta$,則$\textbf{u}$與$\textbf{v}$夾角會是$\dfrac{\theta}{2}$。
▲旋轉示意圖,注意$\textbf{u}$與$\textbf{v}$不必是單位向量

設$R = \textbf{vu}$,於是旋轉可寫成$R\textbf{a}R^{-1}$。若$\mathbf{v}$與$\mathbf{u}$都是單位向量,可以避免每次旋轉都要計算反元素,此時$R$稱作rotor,且$R^{-1} = \dfrac{\widetilde{R}}{\lVert R \rVert^2} = \widetilde{R}$,於是旋轉公式可改寫為$R\textbf{a}\widetilde{R}$。其中波浪符號稱作reversion,作用是把向量以反順序來乘,即$\widetilde{R} = \textbf{uv}$,效果相當於四元數的共軛。

相信到這裡已經能看出四元數的作用等同rotor $R$,但是四元數是由旋轉軸與角度組成,rotor由兩個向量的幾何積所組成。我們還需要更了解rotor的性質,才能看出兩者之間的關聯。


Rotor的性質

以下把$\textbf{u}$和$\textbf{v}$設定為單位向量。

從上面的例子我們已經知道rotor $R$的旋轉方向是$\textbf{u}$到$\textbf{v}$,因此習慣上會把rotor的展開式寫成$\textbf{u}$在$\textbf{v}$前面:
$$
\begin{aligned}
R &= \textbf{vu} \\
&= \textbf{v} \cdot \textbf{u} + \textbf{v} \wedge \textbf{u} \\
&= \textbf{u} \cdot \textbf{v} - \textbf{u} \wedge \textbf{v}
\end{aligned}
$$
從這個式子可以觀察到rotor是由純量部分和平面部分所組成,其中純量部分為$\textbf{u} \cdot \textbf{v} = \cos (\dfrac{\theta}{2})$,存有旋轉角度的資訊。平面部分則存有旋轉方向的資訊,且旋轉發生於這個平面上。意思是若把向量$\textbf{a}$拆解成垂直於平面的向量$\textbf{a}_{\uparrow}$,和投影到平面上的向量$\textbf{a}_{\parallel}$,使$\textbf{a} = \textbf{a}_{\uparrow} + \textbf{a}_{\parallel}$。只有$\textbf{a}_{\parallel}$會被旋轉$\theta$度變成$\textbf{a}'_{\parallel}$,旋轉後的向量為$\textbf{a}' = \textbf{a}_{\uparrow} + \textbf{a}'_{\parallel}$。

製造平面不是只有對位於平面上兩個向量做外積這個方法,對一個向量做正交補餘可以得到垂直於該向量的平面。首先我們看一下3D的$\textbf{u} \wedge \textbf{v}$展開來是什麼樣子:
$$
\begin{aligned}
\textbf{u} \wedge \textbf{v}
&= (u_1 \textbf{e}_1 + u_2\textbf{e}_2 + u_3\textbf{e}_3) \wedge (v_1 \textbf{e}_1 + v_2\textbf{e}_2 + v_3\textbf{e}_3) \\
&=  \cancel{u_1v_1(\textbf{e}_1 \wedge \textbf{e}_1)} + u_1v_2(\textbf{e}_1 \wedge \textbf{e}_2) + u_1v_3(\textbf{e}_1 \wedge \textbf{e}_3)\\
&+ u_2v_1(\textbf{e}_2 \wedge \textbf{e}_1) + \cancel{u_2v_2(\textbf{e}_2 \wedge \textbf{e}_2)} + u_2v_3(\textbf{e}_2 \wedge \textbf{e}_3)\\
&+ u_3v_1(\textbf{e}_3 \wedge \textbf{e}_1) + u_3v_2(\textbf{e}_3 \wedge \textbf{e}_2) + \cancel{u_3v_3(\textbf{e}_3 \wedge \textbf{e}_3)} \\
&= (u_2v_3 - u_3v_2)\textbf{e}_2 \wedge \textbf{e}_3 + (u_3v_1 - u_1v_3)\textbf{e}_3\wedge \textbf{e}_1 + (u_1v_2 - u_2v_1)\textbf{e}_1 \wedge \textbf{e}_2 \\
&= (u_2v_3 - u_3v_2)\textbf{e}_2\textbf{e}_3 + (u_3v_1 - u_1v_3)\textbf{e}_3\textbf{e}_1 + (u_1v_2 - u_2v_1)\textbf{e}_1\textbf{e}_2
\end{aligned}
$$
若忽略基底部分,可看到數字部分和$\textbf{u} \times \textbf{v}$的結果一模一樣,只不過cross product產生的是向量,上式產生的是平面。對平面取正交補餘可以得到垂直於平面的向量,方法是將平面乘以$\textbf{I}^{-1}_3$,其中$\textbf{I}^{-1}_3 = \dfrac{\widetilde{\textbf{I}_3}}{\lVert \textbf{I}_3 \rVert^2} = \widetilde{\textbf{I}_3} = \textbf{e}_3\textbf{e}_2\textbf{e}_1$。下面示範平面基底取正交補餘得到向量基底:
$$
\begin{aligned}
(\textbf{e}_2\textbf{e}_3)(\textbf{I}^{-1}_3) &= \textbf{e}_2(\textbf{e}_3\textbf{e}_3)\textbf{e}_2\textbf{e}_1 = (\textbf{e}_2\textbf{e}_2)\textbf{e}_1 = \textbf{e}_1 \\

(\textbf{e}_3\textbf{e}_1)(\textbf{I}^{-1}_3) &= \textbf{e}_3(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{1}\mathbf{e}_3})\textbf{e}_2\textbf{e}_1 = -(\textbf{e}_3\textbf{e}_3)\textbf{e}_1\textbf{e}_2\textbf{e}_1 = -\textbf{e}_1(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{2}\mathbf{e}_1}) = (\textbf{e}_1\textbf{e}_1)\textbf{e}_2 = \textbf{e}_2 \\

(\textbf{e}_1\textbf{e}_2)(\textbf{I}^{-1}_3) &= \textbf{e}_1\textbf{e}_2(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{3}\mathbf{e}_2})\textbf{e}_1 = -\textbf{e}_1(\textbf{e}_2\textbf{e}_2)\textbf{e}_3\textbf{e}_1 = -\textbf{e}_1(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{3}\mathbf{e}_1}) = (\textbf{e}_1\textbf{e}_1)\textbf{e}_3 = \textbf{e}_3

\end{aligned}
$$
設垂直於$\textbf{u}\wedge \textbf{v}$平面的單位向量為$\textbf{w}$(此即旋轉軸),於是cross product可以用幾何代數寫成:
$$
\textbf{u} \times \textbf{v} = (\textbf{u} \wedge \textbf{v})\textbf{I}^{-1}_3 = \sin(\dfrac{\theta}{2})\textbf{w}$$
要從旋轉軸得到平面需做還原動作,在右邊乘以$\textbf{I}_3$:
$$
\begin{aligned}
\sin(\dfrac{\theta}{2})\textbf{w} \textbf{I}_3 &= (\textbf{u} \wedge \textbf{v})\textbf{I}^{-1}_3 \textbf{I}_3  \\
&= \textbf{u} \wedge \textbf{v}
\end{aligned}
$$
到這裡我們獲得了用旋轉軸和角度來產生rotor的手段,終於得到足夠材料可以知道四元數的$i$、$j$、$k$是什麼組成的。


四元數的三個虛數

有角度和旋轉軸就能製造四元數,旋轉軸為單位向量$\textbf{w} : (w_1,\ w_2,\ w_3)$,於是四元數可寫成:
$$
q = \cos( \frac{\theta}{2}) + \sin (\frac{\theta}{2})(w_1i + w_2j + w_3k)
$$
rotor也如法炮製:
$$
\begin{aligned}
R &= \textbf{u} \cdot \textbf{v} - \textbf{u} \wedge \textbf{v} \\
&= \cos(\frac{\theta}{2}) - \sin(\frac{\theta}{2})\textbf{w} \textbf{I}_3 \\
&= \cos(\frac{\theta}{2}) - \sin(\frac{\theta}{2})(w_1\textbf{e}_2\textbf{e}_3 + w_2\textbf{e}_3\textbf{e}_1 + w_3\textbf{e}_1\textbf{e}_2)
\end{aligned}
$$
兩個式子比對之下可立即看出虛數和平面基底差了一個負號,於是$i = \textbf{e}_3\textbf{e}_2$、$j = \textbf{e}_1\textbf{e}_3$,和$k=\textbf{e}_2\textbf{e}_1$。
$$
\displaylines{
i^2 = \textbf{e}_3(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{2}\mathbf{e}_3})\textbf{e}_2 = -(\textbf{e}_3\textbf{e}_3)(\textbf{e}_2\textbf{e}_2) = -1 \\
j^2 = \textbf{e}_1(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{3}\mathbf{e}_1})\textbf{e}_3 = -(\textbf{e}_1\textbf{e}_1)(\textbf{e}_3\textbf{e}_3) = -1 \\
k^2 = \textbf{e}_2(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{1}\mathbf{e}_2})\textbf{e}_1 = -(\textbf{e}_2\textbf{e}_2)(\textbf{e}_1\textbf{e}_1) = -1 \\
ijk = \textbf{e}_3\textbf{e}_2(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{1}\mathbf{e}_3})\textbf{e}_2\textbf{e}_1 = -\textbf{e}_3(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{2}\mathbf{e}_3})(\stackrel{\textcolor{magenta}{\curvearrowright}}{\mathbf{e}_{1}\mathbf{e}_2})\textbf{e}_1 = - (\textbf{e}_3\textbf{e}_3)(\textbf{e}_2\textbf{e}_2)(\textbf{e}_1\textbf{e}_1) = -1 \\
ij =\textbf{e}_3\textbf{e}_2\textbf{e}_1\textbf{e}_3 = \textbf{e}_2\textbf{e}_1 = k \\
jk = \textbf{e}_1\textbf{e}_3\textbf{e}_2\textbf{e}_1 = \textbf{e}_3\textbf{e}_2 = i \\
ki = \textbf{e}_2\textbf{e}_1\textbf{e}_3\textbf{e}_2 = \textbf{e}_1\textbf{e}_3 = j
}
$$
如上所示,幾何代數可以推導出四元數虛數的所有基本性質。$i$、$j$、$k$不再是imaginary number,而是實際存在於3D空間中的幾何元素。


結語

四元數的缺陷和複數一樣,因為缺少基底而無法分辨向量和rotor,而且只能用在3D向量上。幾何代數的旋轉公式不只能用於任意維度,它還有outermorphism性質,可以應用在所有幾何元素上,不需要為每種情況的組合都找一個對應的公式。另外,由於基底可用於分辨幾何元素,也能用來檢查演算法的正確性。若輸出的結果不是自己預期的幾何元素,就知道演算法有問題。也可使用視覺化程式,例如GAViewer或本文章所使用的ganja.js,確認幾何元素是否正確且位於預期的位置與方向。

幾何代數依照維度與基底的選擇有不同的稱呼,文章內容屬於Euclidean Geometric Algebra(簡稱EGA)的範圍。近年來有人提出Plane-based(或Projective) Geometric Algebra(簡稱PGA),增加了幾何元素的種類和許多有用的數學性質,有興趣的人可以研究看看。

下一篇補充更多內積與外積的性質,解釋為什麼乘以$\textbf{I}^{-1}_3$可以得到正交補餘。

創作回應

更多創作