四元數 學習筆記

383494發表於2024-04-20

License: CC BY-NC-SA 4.0

目錄
  • 複數
    • 極座標表示
  • 三維旋轉
  • 四元數
    • Grassmann 積
    • 純四元數
    • 共軛
  • 三維旋轉,但是四元數
    • 矩陣形式
    • 旋轉的複合
    • 四元數的插值
  • 參考資料

複數

在瞭解四元數之前,要先了解複數對空間幹了什麼。

設有複數 \(z_1 = a+b \mathrm{i}, z_2 = c+d \mathrm{i}\),則

\[z_1 z_2 = ac-bd+(bc+ad)\mathrm{i} \]

如果將 \(z_1\) 看作變換, \(z_2\) 看作數,則用線性代數的語言表達就是

\[z_1z_2 = \begin{bmatrix} a & -b \\ b & a \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix} \]

我們可以發現,複數相乘這個運算,其實是與 \(\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'}=\cos(\theta) \mathbf{u} + (1-\cos(\theta)) (\mathbf{u} \cdot \mathbf{v}) \mathbf{v} + \sin(\theta) (\mathbf{v} \times \mathbf{u}) \]

其中 \(\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}\)).

則有

\[q_1 q_2 = (ae-\mathbf{v} \cdot \mathbf{u}, a \mathbf{u} + e \mathbf{v} + \mathbf{v} \times \mathbf{u}) \]

讀者自證不難(

純四元數

實部為 \(0\) 的四元數。

一個性質:設 \(q_1 = (0, \mathbf{v}), q_2 = (0, \mathbf{u})\)

則有

\[\begin{aligned} q_1 q_2 &= (0- \mathbf{v} \cdot \mathbf{u}, 0 + \mathbf{v} \times \mathbf{u}) \\ & = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u}) \end{aligned} \]

共軛

三個虛部全部取相反數。四元數 \(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\).

\[\begin{aligned} u' &= u_\parallel + q u_\perp \\ &= pp^{-1}u_\parallel + p^2 u_\perp & (p^2=q) \\ &= p \bar{p} u_\parallel + pp u_\perp & (p^{-1} = \bar{p}) \end{aligned} \]

接下來有兩個引理,可以用 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\).

然後繼續變形:

\[\begin{aligned} u' &= p \bar{p} u_\parallel + ppu_\perp \\ &= p u_\parallel \bar{p} + p u_\perp \bar{p} \\ &= p (u_\parallel + u_\perp) \bar{p} \\ &= p u \bar{p} \\ &= p u p^{-1} \end{aligned} \]

就得到了一個簡潔的式子:\(u'=pup^{-1}\).

矩陣形式

左乘一個四元數 \(q=a+b \mathrm{i} + c \mathrm{j} + d \mathrm{k}\) 有相應的矩陣形式

\[\begin{bmatrix} a & -b & -c & -d \\ b & a & -d & c \\ c & d & a & -b \\ d & -c & b & a \end{bmatrix} \]

旋轉的複合

有引理:

\(\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 的教程

相關文章