三維空間的旋轉矩陣

本文的閱讀等級:中級

在二維平面上,逆時針方向旋轉 \theta 徑度 (弧度,radian) 的旋轉矩陣為 (見“幾何變換矩陣的設計”)

\displaystyle  R=R(\theta)=\left[\!\!\begin{array}{cr}  \cos\theta&-\sin\theta\\  \sin\theta&\cos\theta  \end{array}\!\!\right]

不難驗證 R 的特徵值為 e^{i\theta}=\cos\theta+i\sin\thetae^{-i\theta}=\cos\theta-i\sin\theta,其中 i=\sqrt{-1},並具有下面兩個基本性質:

  1. 旋轉矩陣 R 的兩個行向量 (column vector) \begin{bmatrix}  \cos\theta\\  \sin\theta  \end{bmatrix}\left[\!\!\begin{array}{r}  -\sin\theta\\  \cos\theta  \end{array}\!\!\right] 組成一個單範正交集 (orthonormal set),也就是說,R 是一個實正交矩陣 (orthogonal matrix),滿足 R^TR=RR^T=I,故逆旋轉矩陣為 (R(\theta))^{-1}=(R(\theta))^T=R(-\theta)
  2. 對於任一實正交矩陣 Q(\det Q)^2=\det(QQ^T)=\det I=1,即得 \det Q=\pm 1。若 \det Q=1,則 Q 稱為適當的 (proper) 正交矩陣。計算 \det R=\cos^2\theta+\sin^2\theta=1,旋轉矩陣 R 是適當的正交矩陣。若 \det Q=-1,則 Q 稱為不適當的正交矩陣,例如鏡射矩陣 (見“旋轉與鏡射”)

    \displaystyle  \left[\!\!\begin{array}{cr}  \cos\theta&\sin\theta\\  \sin\theta&-\cos\theta  \end{array}\!\!\right]

本文討論常見於電腦圖學 (computer graphics) 和機器人學的三維空間旋轉,並介紹數種 3\times 3 階旋轉矩陣表示法,包括羅德里格旋轉公式 (Rodrigues’ rotation formula)、Cayley 變換以及歐拉角公式。除此之外,四元數 (quaternion) 亦可表示三維空間旋轉 (見“四元數與三維空間旋轉”)。

 
歐拉旋轉定理

歐拉 (Leonhard Euler) 於1775年根據簡單的幾何論述證明了這個旋轉定理:在三維空間中,若一個剛體發生位移且剛體內至少有一點固定不動,則此位移等價於一個繞著穿越該固定點的固定軸的旋轉。簡單講,歐拉旋轉定理說:每一個三維空間旋轉皆可表示為對於一個固定軸的旋轉。用線性代數術語來說,若 R 是一個定義於 \mathbb{R}^3 的旋轉矩陣,則存在一個非零向量 \mathbf{u} 使得 R\mathbf{u}=\mathbf{u},我們稱 \mathbf{u} 是對於 R 的一個不動點 (fixed point),幾何意義是 \mathbf{u} 表示旋轉軸的指向向量,旋轉軸上的每一點 k\mathbf{u} (k 是任一實數) 不受旋轉運動而改變。

下面介紹一個歐拉旋轉定理的矩陣證法。令 R 為一個 3\times 3 階旋轉矩陣,\det R=1,且對於任意 \mathbf{x},\mathbf{y}\in\mathbb{R}^3

\displaystyle  \Vert R\mathbf{x}-R\mathbf{y}\Vert=\Vert\mathbf{x}-\mathbf{y}\Vert

上式稱為等距同構 (isometry),意思是旋轉不改變任兩點之間的距離。正交矩陣等價於等距同構 (見“等距同構與么正矩陣”),換句話說,如同 2\times 2 階旋轉矩陣,每一個 3\times 3 階旋轉矩陣皆為適當的正交矩陣。利用 R^T=R^{-1}\det R^{-1}=(\det R)^{-1}=1\det(I-R)=(-1)^3\det(R-I)=-\det(R-I),可推得

\displaystyle\begin{aligned}  \det(R-I)&=\det((R-I)^T)=\det(R^T-I)=\det(R^{-1}-I)\\  &=\det(R^{-1}(I-R))=\det(R^{-1})\det(I-R)\\  &=-(\det R^{-1})\det(R-I)=-\det(R-I),  \end{aligned}

即有 \det(R-I)=0。所以,旋轉矩陣 R 有一個特徵值 1,對應特徵向量 \mathbf{u},即 R\mathbf{u}=\mathbf{u}

 
羅德里格旋轉公式

適當的正交矩陣的行列式為 1,實正交矩陣的特徵值的絕對值等於 1 (見“特殊矩陣 (3):么正矩陣 (酉矩陣)”),且實矩陣若存在複特徵值必然為共軛對 (見“解讀複特徵值”)。因此,由歐拉旋轉定理可推論 3\times 3 階旋轉矩陣 R 的特徵值為 1,e^{i\theta},e^{-i\theta}。旋轉矩陣 R 滿足 RR^\ast=R^\ast R,此為正規 (normal) 矩陣家族的標記 (見“特殊矩陣 (2):正規矩陣”),等價條件是 R 可么正對角化為 R=UDU^\ast,其中 U 是么正 (unitary) 矩陣,U^\ast=U^{-1},且 D=\text{diag}(1,e^{i\theta},e^{-i\theta})。令 U=\begin{bmatrix}  \mathbf{u}&\mathbf{v}&\mathbf{w}  \end{bmatrix},其中 \mathbf{u},\mathbf{v},\mathbf{w} 組成一個單範正交集。么正對角化蘊含下列性質:

  1. U^\ast U=I 推得 \mathbf{u}^\ast\mathbf{u}=\mathbf{v}^\ast\mathbf{v}=\mathbf{w}^\ast\mathbf{w}=1\mathbf{u}^\ast\mathbf{v}=\mathbf{v}^\ast\mathbf{w}=\mathbf{w}^\ast\mathbf{u}=0
  2. UU^\ast=I 推得 \mathbf{u}\mathbf{u}^\ast+\mathbf{v}\mathbf{v}^\ast+\mathbf{w}\mathbf{w}^\ast=I (見“矩陣乘法的現代觀點”)。
  3. 乘開 RU=UDR\mathbf{u}=\mathbf{u} 表明 \mathbf{u} 是一個單位實向量,R\mathbf{v}=e^{i\theta}\mathbf{v}R\mathbf{w}=e^{-i\theta}\mathbf{w} 表明 \mathbf{v}\mathbf{w} 是單位複向量。

使用這些性質以及歐拉公式 e^{\pm i\theta}=\cos\theta\pm i\sin\theta

\displaystyle\begin{aligned}  R&=\begin{bmatrix}  \mathbf{u}&\mathbf{v}&\mathbf{w}  \end{bmatrix}\begin{bmatrix}  1&0&0\\  0&e^{i\theta}&0\\  0&0&e^{-i\theta}  \end{bmatrix}\begin{bmatrix}  \mathbf{u}^\ast\\  \mathbf{v}^\ast\\  \mathbf{w}^\ast  \end{bmatrix}\\  &=\mathbf{u}\mathbf{u}^\ast+(\cos\theta+i\sin\theta)\mathbf{v}\mathbf{v}^\ast+(\cos\theta-i\sin\theta)\mathbf{w}\mathbf{w}^\ast\\  &=\cos\theta(\mathbf{u}\mathbf{u}^\ast+\mathbf{v}\mathbf{v}^\ast+\mathbf{w}\mathbf{w}^\ast)+(1-\cos\theta)\mathbf{u}\mathbf{u}^\ast+i\sin\theta(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)\\  &=\cos\theta I+(1-\cos\theta)\mathbf{u}\mathbf{u}^T+i\sin\theta(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)\\  &=\cos\theta I+(1-\cos\theta)\mathbf{u}\mathbf{u}^T+\sin\theta K,  \end{aligned}

其中 K=i(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)。因為 R\mathbf{u}\mathbf{u}^T 是實矩陣,上式表明 K 也是一個實矩陣,則

\displaystyle  K^T=K^\ast=-i(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)^\ast=-i(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)=-K

推知 K 是反對稱矩陣 (見“特殊矩陣 (13):反對稱矩陣”)。令 K=\left[\!\!\begin{array}{rrr}  0&a&b\\  -a&0&c\\  -b&-c&0  \end{array}\!\!\right],其中 a,b,c\in\mathbb{R}。對於任一 \theta\mathbf{u}=R\mathbf{u}=\cos\theta\mathbf{u}+(1-\cos\theta)\mathbf{u}+\sin\theta K\mathbf{u}=\mathbf{u}+\sin\theta K\mathbf{u},可得

\displaystyle  K\mathbf{u}=\left[\!\!\begin{array}{rrr}  0&a&b\\  -a&0&c\\  -b&-c&0  \end{array}\!\!\right]\begin{bmatrix}  u_1\\  u_2\\  u_3  \end{bmatrix}=\begin{bmatrix}  0\\  0\\  0  \end{bmatrix}

或改寫為

\displaystyle  \left[\!\!\begin{array}{rrr}  u_2&u_3&0\\  -u_1&0&u_3\\  0&-u_1&-u_2  \end{array}\!\!\right]\begin{bmatrix}  a\\  b\\  c  \end{bmatrix}=\begin{bmatrix}  0\\  0\\  0  \end{bmatrix}

解開上式,

\displaystyle  \begin{bmatrix}  a\\  b\\  c  \end{bmatrix}=\alpha\left[\!\!\begin{array}{r}  -u_3\\  u_2\\  -u_1  \end{array}\!\!\right]

其中 \alpha 是一個待確定的實數。定義「外積矩陣」

\displaystyle  \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}=\left[\!\!\begin{array}{rrr}  0&-u_3&u_2\\  u_3&0&-u_1\\  -u_2&u_1&0  \end{array}\!\!\right]

此名稱由來係因 \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}\mathbf{x}=\mathbf{u}\times\mathbf{x},其中 \times 表示向量外積 (cross product,或稱向量積),即有 K=\alpha\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times。使用單範正交集 \{\mathbf{u},\mathbf{v},\mathbf{w}\} 的基本性質,

\displaystyle\begin{aligned}  K^2&=i^2(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)(\mathbf{v}\mathbf{v}^\ast-\mathbf{w}\mathbf{w}^\ast)\\  &=-(\mathbf{v}\mathbf{v}^\ast\mathbf{v}\mathbf{v}^\ast-\mathbf{v}\mathbf{v}^\ast\mathbf{w}\mathbf{w}^\ast-\mathbf{w}\mathbf{w}^\ast\mathbf{v}\mathbf{v}^\ast+\mathbf{w}\mathbf{w}^\ast\mathbf{w}\mathbf{w}^\ast)\\  &=-(\mathbf{v}\mathbf{v}^\ast+\mathbf{w}\mathbf{w}^\ast)\\  &=\mathbf{u}\mathbf{u}^T-I.\end{aligned}

再將 K=\alpha\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times 代入上式,立得 \alpha=\pm 1。我們選擇 \alpha=1,原因是配合慣例使 \theta 代表逆時針轉角 (稍後說明)。令 R_\mathbf{u}(\theta) 代表一個旋轉矩陣,其特徵值為 1,\cos\theta\pm i\sin\theta\mathbf{u} 為對應特徵值 1 的單位特徵向量。綜合以上結果,旋轉矩陣 R_\mathbf{u}(\theta) 的公式如下:

\displaystyle\begin{aligned}  R_\mathbf{u}(\theta)&=\cos\theta I+(1-\cos\theta)\mathbf{u}\mathbf{u}^T+\sin\theta \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}\\  &=\begin{bmatrix}  u_1u_1v\theta+c\theta&u_1u_2v\theta-u_3s\theta&u_1u_3v\theta+u_2s\theta\\  u_1u_2v\theta+u_3s\theta&u_2u_2v\theta+c\theta&u_2u_3v\theta-u_1s\theta\\  u_1u_3v\theta-u_2s\theta&u_2u_3v\theta+u_1s\theta&u_3u_3v\theta+c\theta  \end{bmatrix},\end{aligned}

其中 c\theta=\cos\thetas\theta=\sin\thetav\theta=1-\cos\theta。上式稱為羅德里格旋轉公式,R_\mathbf{u}(\theta) 由參數 u_1,u_2,u_3,\theta 決定,但實際僅含三個自由參數 (或稱自由度),因為 u_1^2+u_2^2+u_3^2=1。另一種解釋是 3\times 3 階適當的正交矩陣 R 包含 9 個元,扣除 6 個限制式 \mathbf{u}^\ast\mathbf{u}=\mathbf{v}^\ast\mathbf{v}=\mathbf{w}^\ast\mathbf{w}=1\mathbf{u}^\ast\mathbf{v}=\mathbf{v}^\ast\mathbf{w}=\mathbf{w}^\ast\mathbf{u}=0,僅存 3 個自由參數。

 
羅德里格旋轉公式還可以用「外積矩陣」\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times} 表達。使用外積恆等式,

\displaystyle\begin{aligned}  \begin{bmatrix}  \mathbf{u}  \end{bmatrix}^2_\times\mathbf{x}&=\mathbf{u}\times(\mathbf{u}\times\mathbf{x})\\  &=(\mathbf{u}^T\mathbf{x})\mathbf{u}-(\mathbf{u}^T\mathbf{u})\mathbf{x}\\  &=(\mathbf{u}\mathbf{u}^T-I)\mathbf{x}.  \end{aligned}

因為 \mathbf{x} 是任一向量,\begin{bmatrix}  \mathbf{u}  \end{bmatrix}^2_\times=\mathbf{u}\mathbf{u}^T-I。所以,

\displaystyle\begin{aligned}  R_\mathbf{u}(\theta)&=\cos\theta I+(1-\cos\theta)\mathbf{u}\mathbf{u}^T+\sin\theta \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}\\  &=\cos\theta I+(1-\cos\theta)\left(I+\begin{bmatrix}  \mathbf{u}  \end{bmatrix}^2_\times\right)+\sin\theta \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}\\  &=I+\sin\theta \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}+(1-\cos\theta)\begin{bmatrix}  \mathbf{u}  \end{bmatrix}^2_\times.  \end{aligned}

 
在羅德里格旋轉公式中,單位向量 \mathbf{u}=(u_1,u_2,u_3)^T 代表旋轉軸的指向,\theta 是由右手法則所決定的轉角 (即大拇指朝向轉軸正向,其餘四根手指的彎曲方向為旋轉方向)。圖一顯示給定向量 \mathbf{x} 可分解為轉軸成分 \mathbf{u}\mathbf{u}^T\mathbf{x} (即 \mathbf{x} 至單位向量 \mathbf{u} 的正交投影) 和旋轉成分 (I-\mathbf{u}\mathbf{u}^T)\mathbf{x},旋轉 \theta 後的結果分別如下:

\displaystyle\begin{aligned}  R_{\mathbf{u}}(\theta)\mathbf{u}\mathbf{u}^T\mathbf{x}  &=\left(\cos\theta I+(1-\cos\theta)\mathbf{u}\mathbf{u}^T+\sin\theta \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}\right)\mathbf{u}\mathbf{u}^T\mathbf{x}\\  &=\cos\theta\mathbf{u}\mathbf{u}^T\mathbf{x}+(1-\cos\theta)\mathbf{u}\mathbf{u}^T\mathbf{x}\\  &=\mathbf{u}\mathbf{u}^T\mathbf{x}  \end{aligned}

說明轉軸成分不因旋轉而改變,另

\displaystyle\begin{aligned}  R_{\mathbf{u}}(\theta)(I-\mathbf{u}\mathbf{u}^T)\mathbf{x}  &=\left(\cos\theta I+(1-\cos\theta)\mathbf{u}\mathbf{u}^T+\sin\theta \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}\right)\mathbf{x}-\mathbf{u}\mathbf{u}^T\mathbf{x}\\  &=\cos\theta\mathbf{x}+(1-\cos\theta)\mathbf{u}\mathbf{u}^T\mathbf{x}+\sin\theta\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times\mathbf{x}-\mathbf{u}\mathbf{u}^T\mathbf{x}\\  &=\cos\theta(I-\mathbf{u}\mathbf{u}^T)\mathbf{x}+\sin\theta\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times\mathbf{x}  \end{aligned}

說明旋轉成分 (I-\mathbf{u}\mathbf{u}^T)\mathbf{x} 在垂直於 \mathbf{u} 的平面上逆時針旋轉 \theta 徑度。

3D rotation

圖一 轉軸為\mathbf{u}轉角等於\theta的旋轉

 
考慮反向問題:給定一個 3\times 3 階旋轉矩陣 R,求旋轉軸向量 \mathbf{u} 和轉角 \theta。若

\displaystyle  R=\begin{bmatrix}  r_{11}&r_{12}&r_{13}\\  r_{21}&r_{22}&r_{23}\\  r_{31}&r_{32}&r_{33}  \end{bmatrix}

\text{trace}R=1+\cos\theta+i\sin\theta+\cos\theta-i\sin\theta=1+2\cos\theta,故

\displaystyle  \theta=\cos^{-1}\frac{\text{trace}R-1}{2}

對照羅德里格旋轉公式,不難驗證

\displaystyle  \mathbf{u}=\frac{1}{2\sin\theta}\begin{bmatrix}  r_{32}-r_{23}\\  r_{13}-r_{31}\\  r_{21}-r_{12}  \end{bmatrix}

若限定 \theta\in[0,\pi],則轉軸轉角對 (\mathbf{u},\theta)(-\mathbf{u},-\theta) 產生相同的旋轉矩陣,即 R_{\mathbf{u}}(\theta)=R_{-\mathbf{u}}(-\theta)

 
Cayley 變換

在矩陣理論中,任何一個不含特徵值 -1 的正交矩陣 Q 都可表示為一個反對稱矩陣 A 的 Cayley 變換 (見“Cayley 變換”),如下:

Q=(I+A)^{-1}(I-A)=(I-A)(I+A)^{-1}

三維空間的旋轉矩陣 R 是一個 3\times 3 階適當的正交矩陣,將反對稱矩陣

\displaystyle  A=\left[\!\!\begin{array}{rrr}  0&z&-y\\  -z&0&x\\  y&-x&0  \end{array}\!\!\right]

代入 Cayley 變換,計算化簡可得

\displaystyle  R=\frac{1}{1+x^2+y^2+z^2}\left[\!\!\begin{array}{ccc}  1+x^2-y^2-z^2&2(xy-z)&2(y+xz)\\  2(xy+z)&1-x^2+y^2-z^2&2(yz-x)\\  2(xz-y)&2(x+yz)&1-x^2-y^2+z^2  \end{array}\!\!\right]

以 Cayley 變換表達的旋轉矩陣的優點是不涉及三角函數,但它有一個限制,即排除了對應特徵值 -1 的旋轉角度 \theta=\pm\pi。定義 Cayley 變換而生的旋轉矩陣的三個參數 x,y,z 與轉軸 \mathbf{u} 及轉角 \theta 有甚麼關係?下面我們探討這個問題。

 
寫出羅德里格旋轉矩陣

\displaystyle  R_{\mathbf{u}}(\theta)=I+\sin\theta\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times+(1-\cos\theta)\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_{\times}^2

t=\tan\frac{\theta}{2}。代入三角恆等式

\displaystyle  \sin\theta=\frac{2t}{1+t^2},~~\cos\theta=\frac{1-t^2}{1+t^2}

旋轉矩陣變成

\displaystyle  R_{\mathbf{u}}(\theta)=I+\frac{2t}{1+t^2}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times+\frac{2t^2}{1+t^2}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^2

利用冪級數

\displaystyle  \frac{1}{1+t^2}=\sum_{k=0}^\infty(-1)^kt^{2k}

以及 \begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^{2k+1}=(-1)^{k}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^{2k}=(-1)^{k+1}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^2,可得

\displaystyle\begin{aligned}  R_\mathbf{u}(\theta)  &=I+2t\sum_{k=0}^\infty(-1)^kt^{2k}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times+2t^2\sum_{k=0}^\infty(-1)^kt^{2k}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^2\\  &=I+2\sum_{k=0}^\infty t^{2k+1}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^{2k+1}-2\sum_{k=0}^\infty t^{2k+2}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^{2k}\\  &=I+2\sum_{k=0}^\infty t^{2k+1}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^{2k+1}+2\sum_{k=0}^\infty t^{2k+2}\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^{2k+2}\\  &=I+2\sum_{m=1}^\infty t^m\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^m\\  &=\left(I+t\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times\right)\sum_{m=0}^\infty t^m\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times^m\\  &=\left(I+t\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times\right)\left(I-t\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times\right)^{-1}.  \end{aligned}

上面使用了 Neumann 無窮級數 (I-B)^{-1}=\sum_{m=0}^\infty B^m (見“Neumann 無窮級數”)。比較 Cayley 變換 R=(I-A)(I+A)^{-1} 和上面的 R_\mathbf{u}(\theta),可得 A=-t\begin{bmatrix}  \mathbf{u}  \end{bmatrix}_\times,即

\displaystyle  \left[\!\!\begin{array}{rrr}  0&z&-y\\  -z&0&x\\  y&-x&0  \end{array}\!\!\right]=t\left[\!\!\begin{array}{rrr}  0&u_3&-u_2\\  -u_3&0&u_1\\  u_2&-u_1&0  \end{array}\!\!\right]

故得關係式

\displaystyle  \begin{bmatrix}  x\\  y\\  z  \end{bmatrix}=\tan\frac{\theta}{2}\begin{bmatrix}  u_1\\  u_2\\  u_3  \end{bmatrix}=\tan\frac{\theta}{2}\mathbf{u}

\theta=\pm\pi\tan\frac{\theta}{2} 未定義,這時 Cayley 變換無法表示旋轉矩陣。

 
歐拉角公式

羅德里格旋轉矩陣完全由轉軸和轉角決定,因此具備清晰的幾何意義,但由於包含冗餘的參數故不適合描述剛體旋轉運動。歐拉角公式提供了包含三個自由參數的旋轉矩陣設計法。具體地說,任何一個三維空間旋轉皆可表示為三個基本旋轉的複合變換。所謂基本旋轉是指以座標軸X,Y,Z作為旋轉軸。採用右手法則,設 \theta 為轉角,稱為歐拉角,R_X(\theta)R_Y(\theta)R_Z(\theta) 分別代表對 X,Y 和 Z 軸的旋轉矩陣,如下:

\displaystyle  \begin{aligned}  R_X(\theta)&=\begin{bmatrix}  1&0&0\\  0&\cos\theta&-\sin\theta\\  0&\sin\theta&\cos\theta  \end{bmatrix}\\  R_Y(\theta)&=\begin{bmatrix}  \cos\theta&0&\sin\theta\\  0&1&0\\  -\sin\theta&0&\cos\theta  \end{bmatrix}\\  R_Z(\theta)&=\begin{bmatrix}  \cos\theta&-\sin\theta&0\\  \sin\theta&\cos\theta&0\\  0&0&1  \end{bmatrix}.\end{aligned}

 
\boldsymbol{\beta}=\{\mathbf{e}_X,\mathbf{e}_Y,\mathbf{e}_Z\} 表示標準座標系統的基底,並令 \boldsymbol{\beta}'\boldsymbol{\beta}''\boldsymbol{\beta}''' 依序表示旋轉過程產生的新基底。任何一個三維空間旋轉可分解成三部分 (見圖二):

  1. \mathbf{e}_Z 為轉軸,轉角為 \alpha,將 \mathbf{e}_X\mathbf{e}_Y 移動至 \mathbf{e}'_X\mathbf{e}'_Y,且 \mathbf{e}'_Z=\mathbf{e}_Z
  2. \mathbf{e}'_X 為轉軸,轉角為 \beta,將 \mathbf{e}'_Y\mathbf{e}'_Z 移動至 \mathbf{e}''_Y\mathbf{e}''_Z,且 \mathbf{e}''_X=\mathbf{e}'_X
  3. \mathbf{e}''_Z 為轉軸,轉角為 \gamma,將 \mathbf{e}''_X\mathbf{e}''_Y 移動至 \mathbf{e}'''_X\mathbf{e}'''_Y,且 \mathbf{e}'''_Z=\mathbf{e}''_Z
Euler angles

圖二 歐拉角

第一個旋轉描述了基底向量 \boldsymbol{\beta}'=\{\mathbf{e}'_X,\mathbf{e}'_Y,\mathbf{e}'_Z\}\boldsymbol{\beta}=\{\mathbf{e}_X,\mathbf{e}_Y,\mathbf{e}_Z\} 之間的線性組合關係:

\displaystyle\begin{aligned}  \mathbf{e}'_X&=\cos\alpha\,\mathbf{e}_X+\sin\alpha\,\mathbf{e}_Y\\  \mathbf{e}'_Y&=-\sin\alpha\,\mathbf{e}_X+\cos\alpha\,\mathbf{e}_Y\\  \mathbf{e}'_Z&=\mathbf{e}_Z  \end{aligned}

或寫成矩陣形式

\displaystyle  \begin{bmatrix}  \mathbf{e}'_X&\mathbf{e}'_Y&\mathbf{e}'_Z  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}_X&\mathbf{e}_Y&\mathbf{e}_Z  \end{bmatrix}\begin{bmatrix}  \cos\alpha&-\sin\alpha&0\\  \sin\alpha&\cos\alpha&0\\  0&0&1  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}_X&\mathbf{e}_Y&\mathbf{e}_Z  \end{bmatrix}R_Z(\alpha)

按同樣的方式,第二次旋轉和第三次旋轉給出下列關係:

\displaystyle  \begin{bmatrix}  \mathbf{e}''_X&\mathbf{e}''_Y&\mathbf{e}''_Z  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}'_X&\mathbf{e}'_Y&\mathbf{e}'_Z  \end{bmatrix}\begin{bmatrix}  1&0&0\\  0&\cos\beta&-\sin\beta\\  0&\sin\beta&\cos\beta  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}'_X&\mathbf{e}'_Y&\mathbf{e}'_Z  \end{bmatrix}R_X(\beta)

以及

\displaystyle  \begin{bmatrix}  \mathbf{e}'''_X&\mathbf{e}'''_Y&\mathbf{e}'''_Z  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}''_X&\mathbf{e}''_Y&\mathbf{e}''_Z  \end{bmatrix}\begin{bmatrix}  \cos\gamma&-\sin\gamma&0\\  \sin\gamma&\cos\gamma&0\\  0&0&1  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}''_X&\mathbf{e}''_Y&\mathbf{e}''_Z  \end{bmatrix}R_Z(\gamma)

合併以上結果即得旋轉座標系統的複合旋轉

\displaystyle  \begin{bmatrix}  \mathbf{e}'''_X&\mathbf{e}'''_Y&\mathbf{e}'''_Z  \end{bmatrix}=\begin{bmatrix}  \mathbf{e}_X&\mathbf{e}_Y&\mathbf{e}_Z  \end{bmatrix}R_Z(\alpha)R_X(\beta)R_Z(\gamma)

每一個三維空間旋轉矩陣皆可用 Z-X-Z 為轉軸的歐拉角公式表示:

R=R_Z(\alpha)R_X(\beta)R_Z(\gamma)=\begin{bmatrix}  c\alpha c\gamma-s\alpha c\beta s\gamma &-c\alpha s\gamma- s\alpha c\beta c\gamma & s\alpha s\beta\\  s\alpha c\gamma+c\alpha c\beta s\gamma &-s\alpha s\gamma+ c\alpha c\beta c\gamma & -c\alpha s\beta\\  s\beta s\gamma &s\beta c\gamma & c\beta  \end{bmatrix}

其中 cs 分別代表 \cos\sin

 
考慮反向問題:給定一個 3\times 3 階旋轉矩陣 R=[r_{ij}],求出以 Z-X-Z 為轉軸的歐拉角 \alpha,\beta,\gamma。因為 r_{13}=s\alpha s\betar_{23}=-c\alpha s\beta,可得 r_{13}^2+r_{23}^2=s^2\beta。除非設定轉角的範圍,代表連續旋轉的歐拉角並不是唯一的。設

\displaystyle  \beta=\tan^{-1}\left(\frac{\sqrt{r_{13}^2+r_{23}^2}}{r_{33}}\right)

其中 \tan^{-1}\left(\frac{y}{x}\right) 的計算採用 \hbox{atan2}(y,x),傳回值的範圍是 (-\pi,\pi],定義如下[1]

\displaystyle  \hbox{atan2}(y,x)=\left\{  \begin{array}{ll}  \hbox{arctan}(\frac{y}{x})&\hbox{if~}x>0\\  \hbox{arctan}(\frac{y}{x})+\pi&\hbox{if~}x<0,y\ge 0\\  \hbox{arctan}(\frac{y}{x})-\pi&\hbox{if~}x<0,y < 0\\  +\pi/2&\hbox{if~}x=0,y > 0\\  -\pi/2&\hbox{if~}x=0,y <0\\  \hbox{undefined}&\hbox{if~}x=0,y=0.  \end{array}  \right.

這裡 \hbox{arctan}\left(\frac{y}{x}\right) 是標準反正切函數,傳回值的範圍是 (-\frac{\pi}{2},\frac{\pi}{2})。若 s\beta\neq 0,立刻有

\displaystyle  \alpha=\tan^{-1}\left(\frac{r_{13}}{-r_{23}}\right),~~\gamma=\tan^{-1}\left(\frac{r_{31}}{r_{32}}\right)

s\beta=0,則有無限多組解,一個特解為 \alpha=\tan^{-1}\left(\frac{r_{12}}{r_{11}}\right)\gamma=0

 
除了上述以 Z-X-Z 為轉軸,我們也可以選擇其他軸作為轉軸,例如,以 Z-Y-X 為轉軸的旋轉方式稱為 yaw-pitch-roll:

  1. \mathbf{e}_Z 為轉軸,轉角為 \alpha,稱為 yaw。
  2. \mathbf{e}'_Y 為轉軸,轉角為 \beta,稱為 pitch。
  3. \mathbf{e}''_X 為轉軸,轉角為 \gamma,稱為 roll。

yaw-pitch-roll 旋轉矩陣為 R=R_Z(\alpha)R_Y(\beta)R_X(\gamma)。事實上,只要連續兩個轉軸不相同便可產生合法的旋轉矩陣,共計有 12 種可能:

X-Y-X     Y-X-Y     Z-X-Z
X-Z-X     Y-Z-Y     Z-Y-Z
X-Y-Z     Y-Z-X     Z-X-Y
X-Z-Y     Y-X-Z     Z-Y-X

 
在代數中,所有的行列式等於 1 的正交矩陣構成一個群 (group)。三維空間的旋轉矩陣形成的群稱為特殊正交群 (special orthogonal group),記作 SO(3)。對於任意 3\times 3 階旋轉矩陣 R\in SO(3)\mathbf{x},\mathbf{y}\in\mathbb{R}^3,請讀者自行證明下列性質:

  1. \Vert R\mathbf{x}\Vert=\Vert\mathbf{x}\Vert,即旋轉不改變向量長度 (保長映射,說明 R 的特徵值的絕對值為 1)。
  2. \Vert R\mathbf{x}-R\mathbf{y}\Vert=\Vert\mathbf{x}-\mathbf{y}\Vert,即旋轉不改變兩點的距離。
  3. (R\mathbf{x})^T(R\mathbf{y})=\mathbf{x}^T\mathbf{y},即旋轉保留向量內積,故不改變兩向量之間的夾角 (保角映射)。
  4. R(\mathbf{x}\times\mathbf{y})=R\mathbf{x}\times R\mathbf{y},即旋轉保留向量外積。

 
註解
[1] 維基百科:atan2

相關閱讀:
This entry was posted in 線性變換, 線性代數專欄 and tagged , , , , , , , , . Bookmark the permalink.

21 Responses to 三維空間的旋轉矩陣

  1. jono says:

    根據 http://blog.sina.com.cn/s/blog_5fb3f125010100hp.html 說到
    “旋轉向量的長度(模)表示繞軸逆時針旋轉的角度(弧度)。旋轉向量與旋轉矩陣可以通過羅德里格斯(Rodrigues)變換進行轉換。”
    請問
    1.某一旋轉向量為 [ 0,0,0],是否代表沒有旋轉?
    2.可以舉幾個簡單的例子來說明旋轉向量嗎?
    例如
    a.某一旋轉(原點不變)為 只繞X軸正30度旋轉,他的旋轉向量=[?,?,?]
    b.某一旋轉(原點不變)為 只繞Y軸正45度旋轉,他的旋轉向量=[?,?,?]
    c.某一旋轉(原點不變)為 只繞Z軸正90度旋轉,他的旋轉向量=[?,?,?]
    _

    • ccjou says:

      上文羅德里格旋轉公式(Rodrigues’ rotation formula)已經給出了旋轉矩陣R_{\mathbf{u}}(\theta)公式,\mathbf{u} 是轉軸所指的單位向量,\theta 是旋轉角。若X軸正30度旋轉,則轉軸為\mathbf{u}=(1,0,0),轉角為\theta=\pi/6,代入公式即可算出旋轉矩陣。如果非要令\mathbf{u}=(0,0,0),恕我亦無計可施。

      • jono says:

        謝謝您的回答。

        聽您的回答 我問的旋轉向量 跟你指的 u 似乎是不一樣的東西?!

        根據 1.維基百科 的 旋轉向量 http://zh.wikipedia.org/wiki/%E5%AE%9A%E5%90%91_(%E5%B9%BE%E4%BD%95)#.E6.97.8B.E8.BD.89.E5.90.91.E9.87.8F
        “他新創了一個向量方法來描述任何轉動;轉動的轉動軸與向量同線,向量的量值就是轉動角度,稱此向量為旋轉向量”
        2. http://blog.sina.com.cn/s/blog_5fb3f125010100hp.html

        我所認知是
        “旋轉向量r(是個3個維度的向量),可以透過Rodrigues轉換成旋轉矩陣R(3×3),
        可再藉由R得出個別繞三軸旋轉的角度。”
        1.請問我的認知是否正確?
        2.上面”轉動的轉動軸與向量同線”,是什麼意思可否舉例說明?
        2.可否舉幾個簡單的實例,來說明旋轉向量。

        再次感謝

        • ccjou says:

          若X軸正30度旋轉,則轉軸為\mathbf{u}=(1,0,0),轉角為\theta=\pi/6,維基百科所述的旋轉向量即為\theta\mathbf{u}=(\pi/6,0,0)。旋轉向量僅能表達卻無法用於計算,四元數是更好的選擇:

          四元數與三維空間旋轉

          • Rongwei Sun says:

            老師看了這篇講解,存在一個疑問。如果某個物理量是軸矢量,情況一:對它採用左旋參考系。對這個軸矢量進行旋轉變換(transform from left-hand laboratory frame to left-hand rotating frame)。情況二:對它採用右旋參考系。對這個軸矢量進行旋轉變換(transform from right-hand laboratory frame to right-hand rotating frame)。
            這兩種情況,有什麼區別呢?
            wiki說這是外代數的內容,然後就困惑了。
            我是對磁矩進行旋轉變換,感覺左旋以及右旋的矢量,在進行矩陣運算的時候,並不應兩計算規則。
            一直承蒙老師指點,十分感謝。

  2. Rongwei Sun says:

    老師,非常感謝您一直的指導,收到連接,開始閱讀。(ps:光速回覆的老師!!)

  3. fish says:

    K=\alpha\begin{bmatrix} \mathbf{u} \end{bmatrix}_\times 代入上式,立得 \alpha=1。如何知道 \alpha=1 而不是 -1?
    同樣的,”因為 r_{13}=s\alpha s\betar_{23}=-c\alpha s\beta,可得 r_{13}^2+r_{23}^2=s^2\beta“,\beta 一樣可取正負值? 怎麼知道 \displaystyle \beta=\tan^{-1}\left(\frac{\sqrt{r_{13}^2+r_{23}^2}}{r_{33}}\right) 而沒有負號??
    感謝指教!

  4. 任書瑋 says:

    請問老師如果我有問題是一旋轉後3×3的矩陣R=[n t b],那它相對於最一開始原始座標系x0,y0,z0分別轉多少度?因為如果我用歐拉角Z-Y-X為轉軸逆推,它會是由原始座標系方位先轉z,再由”轉完後”的座標系方位去轉y,之後”再次轉完後”的座標系方位去轉x,但如果我是要全部轉軸的方向都是原始座標系x0,y0,z0,那是要哪種堆導?

  5. 任書瑋 says:

    沒錯我的問題就是extrinsic rotations,感謝老師

  6. 吳同學 says:

    老師您好,我建立了一個座標(F1),建立好後透過向量內積確定XYZ間皆為垂直。然後我對F1的Y軸旋轉”-30″度後產生一個新的座標系(F2),建立好建立好後透過向量內積確定XYZ間是否垂直,結果發現F2的XZ向量間的夾角變成了83.80度。想請問老師對此有何看法,謝謝

    • 吳同學 says:

      建立好建立好後透過向量內積確定XYZ間是否垂直 → 建立好後透過向量內積確定XYZ間是否垂直

    • ccjou says:

      我想到兩種可能:
      1) 你發現了一套新幾何學;
      2) 你算錯了。

  7. 小游 says:

    老師好,
    如果是座標點(1,0,0)以軸(X,Y,Z),X=Y=Z旋轉30度,要求該點的新座標。
    請問也是用歐拉角公式來求嗎?

  8. Evan says:

    請問老師,本頁歐拉角公式是旋轉座標系還是旋轉向量時使用?
    根據wiki,兩者的旋轉矩陣的theta會差一個負號。
    https://en.wikipedia.org/wiki/Rotation_matrix#cite_note-3
    本頁看敘述應是旋轉座標系,wiki則是旋轉向量,但兩者的旋轉矩陣卻相同

    • ccjou says:

      本文的歐拉角公式給出的是旋轉矩陣,新座標系是舊座標系經旋轉而得。

  9. 丫穆 says:

    請問一下,
    有一原始座標(x0,y0,z0),目的為座標(x1,y1,z1),
    要如何求得其旋轉矩陣。

Leave a comment