四元数和空间旋转

**單位四元數**（**Unit quaternion**）可以用於表示三維空間裡的旋轉。它與常用的另外兩種表示方式（三維正交矩陣和歐拉角）是等價的，但是避免了歐拉角表示法中的萬向鎖問題。比起三維正交矩陣表示，四元數表示能夠更方便地給出旋轉的轉軸與旋轉角。

## 基本方法

用四元數來表示旋轉要解決兩個問題，一是如何用四元數表示三維空間裡的點，二是如何用四元數表示三維空間的旋轉。

### 四元數表示空間中的點

若三維空間裡的一個點的笛卡兒坐標為 (x,y,z)，則它用純四元數（類似於純虛數，即實部為 0 的四元數）xi+yj+zk 表示。

### 單位四元數表示一個三維空間旋轉

設 q 為一個單位四元數，而 p 是一個純四元數，定義

　
: $R_{q}(p)=qpq^{-1}$

則 Rq(p) 也是一個純四元數，可以證明 Rq 確實表示一個旋轉，這個旋轉將空間的點 p 旋轉為空間的另一個點 Rq(p)。

## 與正交矩陣表示的關係

四元數的表示與正交矩陣表示是等價的，這可以通過直接的代數計算得到。

仿照關於單位複數的歐拉公式的證明方法，可以得到單位四元數的歐拉公式：

　
: $e^{{\frac {\theta }{2}}(xi+yj+zk)}=\cos {\frac {\theta }{2}}+(xi+yj+zk)\sin {\frac {\theta }{2}},\quad {\text{for }}x,y,z\in \mathbb {R} {\text{ s.t. }}x^{2}+y^{2}+z^{2}=1$

顯然，當 x=1, y=z=0 的時候就回到一般的歐拉公式。

設

　
: $q=e^{{\frac {\theta }{2}}(u_{x}i+u_{y}j+u_{z}k)}=\cos {\frac {\theta }{2}}+(u_{x}i+u_{y}j+u_{z}k)\sin {\frac {\theta }{2}}$

　
: $p=xi+yj+zk$

　
: $p'=q^{-1}pq=w+x'i+y'j+z'k$

（通過下面的計算可以知道，w=0，即計算結果是純四元數）

則

　
: $q^{-1}=e^{-{\frac {\theta }{2}}(u_{x}i+u_{y}j+u_{z}k)}=\cos {\frac {\theta }{2}}-(u_{x}i+u_{y}j+u_{z}k)\sin {\frac {\theta }{2}}$

為簡便起見，令

　
: $c=\cos {\frac {\theta }{2}},s=\sin {\frac {\theta }{2}}$

$$
{\begin{array}{rcl}q^{-1}pq&=&[c-(u_{x}i+u_{y}j+u_{z}k)s](xi+yj+zk)[c+(u_{x}i+u_{y}j+u_{z}k)s]\\&=&[c-(u_{x}i+u_{y}j+u_{z}k)s]\{-(u_{x}x+u_{y}y+u_{z}z)s+i[xc+(u_{z}y-u_{y}z)s]+j[yc+(u_{x}z-u_{z}x)s]+k[zc+(u_{y}x-u_{x}y)s]\}\\&=&i\{xc^{2}+2(u_{z}y-u_{y}z)sc+[u_{x}(u_{x}x+u_{y}y+u_{z}z)-u_{y}(u_{y}x-u_{x}y)+u_{z}(u_{x}z-u_{z}x)]s^{2}\}+\ldots \end{array}}
$$

省略號表示由第一項通過簡單的輪換可以得到的項。最後得到四元數的矩陣表示為

$$
{\begin{bmatrix}x'\\y'\\z'\end{bmatrix}}=M(q){\begin{bmatrix}x\\y\\z\end{bmatrix}}={\begin{bmatrix}c^{2}-(1-2u_{x}^{2})s^{2}&2u_{x}u_{y}s^{2}+2u_{z}sc&2u_{x}u_{z}s^{2}-2u_{y}sc\\2u_{x}u_{y}s^{2}-2u_{z}sc&c^{2}-(1-2u_{y}^{2})s^{2}&2u_{y}u_{z}s^{2}+2u_{x}sc\\2u_{x}u_{z}s^{2}+2u_{y}sc&2u_{y}u_{z}s^{2}-2u_{x}sc&c^{2}-(1-2u_{z}^{2})s^{2}\\\end{bmatrix}}{\begin{bmatrix}x\\y\\z\end{bmatrix}}
$$

設

　
: $C=\cos \theta ,S=\sin \theta $

運用簡單的三角恆等變形可以得到，

　
: $M(q)={\begin{bmatrix}C+u_{x}^{2}(1-C)&u_{x}u_{y}(1-C)+u_{z}S&u_{x}u_{z}(1-C)-u_{y}S\\u_{x}u_{y}(1-C)-u_{z}S&C+u_{y}^{2}(1-C)&u_{y}u_{z}(1-C)+u_{x}S\\u_{x}u_{z}(1-C)+u_{y}S&u_{y}u_{z}(1-C)-u_{x}S&C+u_{z}^{2}(1-C)\\\end{bmatrix}}$

容易驗證，M(q) 是正交矩陣，且行列式為 + 1，於是我們得到了四元數對應於正交矩陣的關係。即我們證明了 Rq 的確表示三維空間中的一個旋轉。進一步由旋轉的正交矩陣表示的相關知識知，上式中的 θ 就是旋轉角。

## 旋轉軸與旋轉角

由四元數的結合律馬上可以得到，若 r 為單位純四元數，則

　
: $R_{e^{i\lambda r}}(kr)=e^{-i\lambda r}kre^{i\lambda r}=kr,\ \forall \lambda ,k\in \mathbb {R} $

這表明 kr 在旋轉操作下不變，也就是 kr 給出旋轉的旋轉軸（當然 r 也給出旋轉的旋轉軸），不妨取 k=s，由四元數的歐拉公式我們馬上知道，任給一個單位四元數 q，計算它的虛部，我們就馬上可以知道轉軸是什麼。

同時，根據四元數的正交矩陣表示，我們又可以馬上得到，計算一個單位四元數的實部，它的反餘弦值給出旋轉角的一半。於是我們馬上可以看到用四元數相對於正交矩陣表示的優勢：在四元數表示下，計算轉軸和旋轉角變得異常簡單。

進一步地，這表明了三維空間中的每一個旋轉都可以用單位四元數表出。若進一步要求 ux 非負，則這種表出是唯一的。

## 旋轉操作的複合

顯然有：

　
: $R_{q_{1}q_{2}}(p)=(q_{1}q_{2})p(q_{1}q_{2})^{-1}=q_{1}q_{2}pq_{2}^{-1}q_{1}^{-1}=R_{q_{1}}[R_{q_{2}}(p)]$

於是兩個旋轉操作的複合，只需要將對應的單位四元數相乘，這一點比歐拉角表示要簡單。

## 與超球面、古典群、自旋群的關係

首先很容易看到，單位四元數與 3 - 球面 S3（或三維實射影空間，**RP**3）同構。

其次，根據單位四元數的矩陣表示，我們又知道，存在一個單位四元數到特殊正交群 SO (3) 的同態，但這不是同構。給定一個角 θ， 2π+θ 與 θ 對應的正交矩陣相同，但是由歐拉公式給出的單位四元數不同（恰好相反）。實際上，這反映了在三維空間中旋轉 2π 弧度和旋轉 4π 弧度是不等價的，參見旋量。

事實上，單位四元數群與自旋群 Spin (3) 同構。這也表明，S3 與自旋群 Spin (3) 同構。進一步地，它們微分同胚。

另一方面，單位四元數群與複數域上的 2 - 球面同構，於是與特殊正交群 SO (2,**C**) 同構，而後者實際上就是特殊么正群 SU (2)。S3 與 SU (2) 也是微分同胚的。

## 參考

* Simon L. Altman (1986) _Rotations, Quaternions, and Double Groups_, Dover Publications.
* Du Val, Patrick (1964), "_Homographies, quaternions, and rotations_". Oxford, Clarendon Press (Oxford mathematical monographs). LCCN 64056979

## 外部連結

* 線代啟示錄 — 四元數與三維空間旋轉（頁面存檔備份，存於網際網路檔案館）
* 四元數與旋轉（頁面存檔備份，存於網際網路檔案館）