在前文中提到在三維空間的旋轉中無論使用歐拉角 Euler Angle 或是軸角 Axis Angle 都有 singularity 的問題,因此在計算中無法使用內插或迭代法尋找正確的旋轉參數。本篇文章將介紹四元數 quaternion,用四元數來表示三維空間旋轉就不會有以上的問題了。
四元數的性質
一個四元數 quaternion 包含了一個實部以及三個虛部:
\[
q = q_0 + q_1\mathbf{i} + q_2\mathbf{j} + q_3\mathbf{k}
\\
\mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{ijk}=-1
\]
其他關於四元數的運算細節請參考此文章 [1]。
四元數與三維旋轉
我們可以用一個單位四元數 unit quaternion (norm 為 1 的四元數)來表示三維空間中的旋轉。我們假設空間中的點 \(p = [x, y, z]\) 繞著旋轉軸 \(\mathbf{u}\) 旋轉 \(\theta\) 度。在計算的時候我們把此三維空間中的點用一個虛四元數來表示:
\[
v = [0, x, y, z]
\]
並且把旋轉軸 \(\mathbf{u}\) 及旋轉角度 \(\theta\) 用一個四元數 \(q\) 來表示:
\[
q = [cos(\frac{1}{2}\theta), sin(\frac{1}{2}\theta)\mathbf{u}]
\]
則旋轉過後的點 \(p' = [x', y', z'\) 可以表示為:
\[
v' = [0, x', y', z'] = qvq^{-1}
\]
公式的證明細節也請參閱參考資料 [1]。
四元數與旋轉向量轉換的例子
上面提到將旋轉向量 \([\mathbf{u}, \theta]\) 轉換成四元數可以用此公式 \(q = [cos(\frac{1}{2}\theta), sin(\frac{1}{2}\theta)\mathbf{u}]\),而將一個四元數 \(q = [q_0, q_1, q_2, q_3]\) 轉換成旋轉向量則可用以下公式:
\[
\theta = 2\ acos(q_0)
\\
\mathbf{u} = [q_1, q_2, q_3] / sin(\frac{\theta}{2})
\]
打個比方,假設三維空間中的旋轉軸為 \([\frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}]\),而旋轉的角度為 120 度,也就是 \(\frac{2}{3}\pi\),則轉換後的四元數為:
\[
q = [cos(\frac{1}{2}\theta), sin(\frac{1}{2}\theta)\mathbf{u}]
\\
= [cos(\frac{1}{3}\pi), sin(\frac{1}{3}\pi)(\frac{1}{\sqrt{3}}\mathbf{i}, \frac{1}{\sqrt{3}}\mathbf{j}, \frac{1}{\sqrt{3}}\mathbf{k}) ]
\\
= [\frac{1}{2}, \frac{1}{2}\mathbf{i}, \frac{1}{2}\mathbf{j}, \frac{1}{2}\mathbf{k}]
\]
而從此四元數 \(q = [\frac{1}{2}, \frac{1}{2}, \frac{1}{2}, \frac{1}{2}]\) 我們可以再用上面的公式轉換回: \[\theta = \frac{2}{3}\pi\\ \mathbf{u} =[\frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}]\]
三維旋轉、四元數與群的關係
接下來我們將三維空間的旋轉表示與抽象代數連結在一起。雖然現在還看不出來有什麼用,但是往後的文章中我們會用到這些性質來做運算。
單位四元數與 SU(2) 是 isomorphic
一下寫出這麼一個定理可能有點太突然了,因此我們先來簡介每個詞的意思。
- 單位四元數:norm 為 1 的四元數
- SU(2):special unitary group,由行列式為 1 的 \(2\times2\) unitary 矩陣組成的群。
- Unitary matrix:是一個複數的方陣 \(U\),滿足 \(U^*U = UU^* = I\) ,其中 \(U^*\) 為 \(U\) 的共軛轉置矩陣。
- 群 Group:指的是抽象代數中的群,定義請參考維基百科。
- 同構 Isomorphic:大意上是說兩個群的結構是完全等價的,定義請參考維基百科。
以下證明取自於參考資料 p.8 [2]。
首先我們可以用一個 \(2\times2\) 的矩陣 H 來表示四元數 \(q = [q_0 + q_1\mathbf{i} + q_2\mathbf{j} + q_3\mathbf{k}]\):
\[
1 =
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix},
\ \mathbf{i} =
\begin{bmatrix}
0 & -1 \\
1 & 0
\end{bmatrix},
\ \mathbf{j} =
\begin{bmatrix}
0 & -i \\
-i & 0
\end{bmatrix},
\ \mathbf{k} =
\begin{bmatrix}
i & 0 \\
0 & -i
\end{bmatrix}
\\
H = \{q_0 + q_1\mathbf{i} + q_2\mathbf{j} + q_3\mathbf{k}\} =
\begin{bmatrix}
q_0 + q_3i & -q_1-q_2i \\
q_1-q_2i & q_0-q_3i
\end{bmatrix}
\]
H 的行列式為 \(q_0^2 + q_1^2 + q_2^2 + q_3^2 = 1\),因此我們可以算出 H 的反矩陣為:
\[
H^{-1}=\begin{bmatrix}
q_0 - q_3i & q_1+q_2i \\
-q_1+q_2i & q_0+q_3i
\end{bmatrix}
= H^*
\]
因此便證明了
單位四元數與 SU(2) 是 isomorphic。
There is a surjective group homomorphism SU(2) \(\rightarrow \) SO(3)
Homomorphism 的定義請參考維基百科,與 isomorphism 不同的地方是 isomorphism 是兩個群之間都存在相互的映射。證明請參閱參考資料 p.13 [2]。
因為對於一個四元數 q 來說,其對應的旋轉 \( qvq^{-1}\) 與 -q 對應的旋轉 \( (-q)v(-q)^{-1}\) 相同,代表說兩個四元數會對應到一個旋轉矩陣,所以四元數與旋轉矩陣只是 surjective homomorphism 的關係,並不是 isomorphism。