License: CC BY-NC-SA 4.0
- 複數
- 極座標表示
- 三維旋轉
- 四元數
- Grassmann 積
- 純四元數
- 共軛
- 逆
- 三維旋轉,但是四元數
- 矩陣形式
- 旋轉的複合
- 四元數的插值
- 雜
- 參考資料
複數
在瞭解四元數之前,要先了解複數對空間幹了什麼。
設有複數 \(z_1 = a+b \mathrm{i}, z_2 = c+d \mathrm{i}\),則
如果將 \(z_1\) 看作變換, \(z_2\) 看作數,則用線性代數的語言表達就是
我們可以發現,複數相乘這個運算,其實是與 \(\begin{bmatrix} a & -b \\ b & a \end{bmatrix}\) 這個矩陣所代表的變換是等價的.
現在來觀察一個單位複數 \(z_1\) 對座標系的基底幹了什麼。
將 \(z_1\) 寫成矩陣形式:\(z_1 = \cos(\theta) + \mathrm{i} \sin(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix}\).
因此它將 \((1,0)\) 的基底旋轉到了 \((\cos \theta, \sin \theta)\),也即逆時針旋轉了 \(\theta\).
極座標表示
\(\exp(\mathrm{i}\theta) = \cos \theta + \mathrm{i} \sin \theta\).
因此對於任意複數 \(z\),我們都能用 \(re^{\mathrm{i}\theta}\) 表示。
不難發現 \(z_1 z_2 = r_1r_2 e^{\mathrm{i}(\theta_1+\theta_2)}\),用人話說就是複數相乘之後模長相乘,角度相加。
三維旋轉
假設三維空間中有一個點 \(\mathbf{u}=(x,y,z)\),繞一個經過原點的軸 \(\mathbf{v}=(r,s,t)\) 逆時針旋轉 \(\theta\). 假定 \(\|\mathbf v\|=1\).
首先可以將 \(\mathbf{u}\) 分解為平行於 \(\mathbf{v}\) 的分量和垂直於 \(\mathbf{v}\) 的分量。平行的分量轉了等於沒轉,下面考慮 \(\mathbf{u}\) 與 \(\mathbf{v}\) 垂直,且 \(\mathbf u \ne \mathbf 0\) 的情況。
既然是垂直,就回到了平面的情況。但平面需要兩個向量來確定,因此我們可以找另一個垂直於 \(\mathbf v\) 的向量:\(\mathbf{w} = \mathbf{v} \times \mathbf{u}\). 不難發現 \(\|\mathbf{w}\| = \|\mathbf{u}\|\),且 \(\mathbf{w}\) 就是 \(\mathbf{u}\) 繞 \(\mathbf{v}\) 逆時針旋轉 \(\dfrac{\pi}{2}\) 得到的向量。
現在問題變成了:在平面裡,給定 \(\mathbf{z_1}\) 和它逆時針旋轉 \(\dfrac{\pi}{2}\) 後的向量 \(\mathbf{z_2}\),求 \(\mathbf{z_1}\) 逆時針旋轉 \(\theta\) 後得到的向量。
相信你會做,答案是 \(\cos(\theta) \mathbf{z_1} + \sin(\theta) \mathbf{z_2}\). 將這個結論應用到上面即可。
於是,我們得到了三維旋轉公式:
其中 \(\mathbf{u'}\) 是旋轉後的 \(\mathbf{u}\), \(\mathbf{u}\) 是任意向量,\(\mathbf{v}\) 是表示旋轉軸的單位向量。
四元數
形如 \(q=a+b \mathrm{i}+ c \mathrm{j} + d \mathrm{k}\),其中 \(a,b,c,d \in \mathbb R\).
全體四元數構成的集合為 \(\mathbb H\).
注意,四元數乘法不符合交換律。
Grassmann 積
如果把四元數的實部單拿出來,就可以寫成一個實數和一個三維向量的有序對。
設 \(q_1, q_2 \in \mathbb{H}\),\(q_1=(a,b,c,d)=(a, \mathbf{v}), q_2=(e,f,g,h)=(e,\mathbf{u})\)(其中 \(\mathbf{v}=\begin{bmatrix} b \\ c \\ d \end{bmatrix}, \mathbf{u}=\begin{bmatrix} f \\ g \\ h \end{bmatrix}\)).
則有
讀者自證不難(
純四元數
實部為 \(0\) 的四元數。
一個性質:設 \(q_1 = (0, \mathbf{v}), q_2 = (0, \mathbf{u})\)
則有
共軛
三個虛部全部取相反數。四元數 \(q\) 的共軛記作 \(\bar q\) 或 \(q^*\).
和虛數類似,\(q \bar{q}= \|q\|^2\). 證明可以大力展開.
逆
由於 \(q \bar{q} = \|q\|^2\),因此對 \(q \ne 0\),它的逆是 \(\dfrac{1}{\|q\|^2}\bar{q}\).
三維旋轉,但是四元數
回憶在描述二維旋轉的時候,我們對空間做了什麼:用複數來描述二維空間裡的點,然後用複數乘法來進行旋轉。
現在對於四元數,能否拿來主義呢?
第一步是描述三維空間裡的點。
對於一個三維空間的點,顯然它只能填滿四元數的三個維度。剩下的一個維度怎麼辦?那就空著吧。\(i,j,k\) 三個維度一看就有大用,等式 \(\mathrm{i}^2 = \mathrm{j}^2 = \mathrm{k}^2 = \mathrm{i} \mathrm{j} \mathrm{k} = -1\) 告訴我們這三個維度有高度的對稱性,那就只剩下實數維度了。
下面,用一個純四元數 \(v\) 與三維向量 \(\mathbf{v}\) 相對應: \(v = (0, \mathbf{v})\).
現在考慮上文提到的三維旋轉問題:將點 \(u\) 繞點 \(v\) 和原點形成的直線逆時針旋轉 \(\theta\),求旋轉後 \(u\) 的位置 \(u'\).
還是假設 \(u\) 垂直於 \(v\)。
回顧向量乘法的結論,旋轉後的向量應該為 \(\cos(\theta) \mathbf{u} + \sin(\theta) \mathbf{v} \times \mathbf{u}\).
觀察純四元數的乘積:\(q_1 q_2 = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u})\)
嘗試直接將 \(u\) 與 \(v\) 相乘:\(vu = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u}) = (0, \mathbf{v} \times \mathbf{u})\),其中後一步是因為 \(\mathbf{u}\) 與 \(\mathbf{v}\) 垂直。
還差一個 \(\sin(\theta)\) 的分量,嘗試直接乘上,再拼拼湊湊:\(\cos(\theta)u + \sin(\theta) vu = (0, \cos(\theta) \mathbf{u} + \sin(\theta) \mathbf{v} \times \mathbf{u})\) 就是我們想要的結果。
它還可以化簡為 \((\cos(\theta) + \sin(\theta) v) u\).
有沒有發現它和複數的極座標表示很像?事實上的確如此,對單位純虛四元數 \(v\),有 \(e^{v \theta}=\cos(\theta)+ v \sin(\theta)\).
接下來令 \(q=e^{v \theta}\),我們想要的結果就是 \(qu\).
現在考慮 \(u\) 不垂直於 \(v\) 的情況。接下來的化簡需要一些注意力(
首先還是將 \(u\) 拆成兩部分 \(u_\perp\) 和 \(u_\parallel\).
記 \(q=\cos(\theta)+v \sin(\theta)\),\(p=\cos(\theta/2)+v \sin(\theta/2)\). \(p,q\) 均為單位四元數且 \(p^2=q\).
接下來有兩個引理,可以用 Grassmann 積證明.
假設 \(v_\parallel\) 為純四元數,\(q=(\alpha, \beta u)\),其中 \(u\) 為單位向量,\(\alpha, \beta \in R\). 此時若 \(\mathbf{v_\parallel}\) 平行於 \(u\),則 \(v_\parallel q = q v_\parallel\).
假設 \(v_\perp\) 為純四元數,\(q=(\alpha, \beta u)\),其中 \(u\) 為單位向量,\(\alpha, \beta \in R\). 此時若 \(\mathbf{v_\perp}\) 垂直於 \(u\),則 \(v_\perp q = \bar{q} v_\perp\).
然後繼續變形:
就得到了一個簡潔的式子:\(u'=pup^{-1}\).
矩陣形式
左乘一個四元數 \(q=a+b \mathrm{i} + c \mathrm{j} + d \mathrm{k}\) 有相應的矩陣形式
旋轉的複合
有引理:
\(\forall q_1, q_2 \in H, \bar{q_1} \bar{q_2} = (q_2 q_1)^*\)
於是旋轉的複合可以寫成 \(q_2 q_1 p \bar{q_1} \bar{q_2} = (q_2 q_1) p (q_2 q_1)^*\)
四元數的插值
咕咕咕……
雜
四元數與旋轉矩陣並不一一對應,而是二對一。(\(q\) 與 \(-q\) 代表同一個旋轉)
參考資料
Krasjet 的教程