2020年7月26日 星期日

Quaternion 四元數簡介

前文中提到在三維空間的旋轉中無論使用歐拉角 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。

旋轉矩陣 R 與 SO(3) 是 isomorphic

  • 旋轉矩陣是前面提過的 \(3\times3\) 矩陣
  • SO(3):special orthogonal group,由 \(3\times3\) 方陣 \(R\) 組成的群,必須滿足線性關係、\(RR^T = R^TR = I\)、以及行列式為 1。細節請參考維基百科
  • 證明:請參閱參考資料 p.12 [2]。

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。


參考資料

[2] Introduction to Lie Groups, Alistair Savage