四元數旋轉公式推導

積極向上的藥鼠李發表於2020-02-28

任務

之前在瞭解關於slam的知識時,見到過四元數,但沒有理解。近日在學習偏微分方程時,發現一個系列視訊3Blue1Brown:深入淺出、直觀明瞭地分享數學之美。
獲益良多,又繼續觀看了感興趣的視訊,其中有四元數。隨著資料的逐漸增多,我也對四元數慢慢形成認知,在此做整理。
主要資料出自https://krasjet.github.io/quaternion/quaternion.pdf

核心

四元數(quaternion)的表示:
q = a + b i + c j + d k q=a+b\boldsymbol{i}+c\boldsymbol{j}+d\boldsymbol{k} q=a+bi+cj+dk
與複數相類,可以表示為:
q = [ a , u ] ( u = [ x y z ] , a , x , y , z ∈ R ) q=[ a,\boldsymbol{u}] (\boldsymbol{u}= \begin{bmatrix} x\\ y\\ z\\ \end{bmatrix}, a,x,y,z\in \mathbb{R}) q=[a,u](u=xyz,a,x,y,zR)
u \boldsymbol{u} u 視為三維空間,而 a a a 處於和 u \boldsymbol{u} u 垂直的第四維度。則對於三維的我們,看到的四元數的視覺化表達只能是切片的結果。

疑問

四元數的應用有剛體的旋轉,而演示最直觀的也是對其做體現,便從中入手。
在觀看視訊時,已經理解了四元數乘法的運算規則:
i i = j j = k k = − 1 i j = − j i = k j k = − k j = i k i = − i k = j \boldsymbol{ii=jj=kk=-1}\\ \boldsymbol{ij=-ji=k}\\ \boldsymbol{jk=-kj=i}\\ \boldsymbol{ki=-ik=j}\\ ii=jj=kk=1ij=ji=kjk=kj=iki=ik=j

自身相乘和虛數的運算一致,不同元素的相乘與向量的叉乘(product)一致,符合右手定則(同樣不符合交換律)

舉個簡單的例子,對於某點 p 0 = 1 + j p_{0}=1+\boldsymbol{j} p0=1+j,也就是 p 0 = [ 1 , u ] ( u = [ 0 1 0 ] p_{0}=[ 1,\boldsymbol{u}] (\boldsymbol{u}= \begin{bmatrix} 0\\ 1\\ 0\\ \end{bmatrix} p0=[1,u](u=010,
左乘 q 0 = i q_{0}=\boldsymbol{i} q0=i同理,它的四元數表達可以為 q 0 = [ 0 , u ] ( u = [ 1 0 0 ] ) q_{0}=[ 0,\boldsymbol{u}] (\boldsymbol{u}= \begin{bmatrix} 1\\ 0\\ 0\\ \end{bmatrix}) q0=[0,u](u=100),
結果 p 0 ′ = q 0 p 0 = i + k p_{0}'=q_{0}p_{0}=\boldsymbol{i}+\boldsymbol{k} p0=q0p0=i+k

在這裡插入圖片描述
從這個例子我們很難看出旋轉的規律,這也正是我們面對的問題,如何表示某個確定的旋轉

在網頁連結的互動平臺https://eater.net親自感受時,觀察到座標實際旋轉恰為給定旋轉角的二倍,十分想理解其中緣由。

在這裡插入圖片描述

在這裡插入圖片描述

從三維旋轉說起

將三維空間中的旋轉表示的方法採用軸角式(Axis-Angle),即某個向量 v \boldsymbol{v} v 圍繞軸 u \boldsymbol{u} u 旋轉角度大小為 θ \theta θ後到達 v ′ \boldsymbol{v'} v,如圖所示(原圖來源:https://krasjet.github.io/quaternion/quaternion.pdf)
在這裡插入圖片描述
將向量 v \boldsymbol{v} v 分解為垂直於 u \boldsymbol{u} u v ⊥ \boldsymbol{v_{\perp}} v 和平行於 u \boldsymbol{u} u v ∥ \boldsymbol{v_{\parallel}} v
由圖易知: v ∥ ′ = v ∥ \boldsymbol{v_{\parallel}'}=\boldsymbol{v_{\parallel}} v=v
故只需計算 v ⊥ ′ \boldsymbol{v_{\perp}'} v即可得 v ′ = v ⊥ ′ + v ∥ ( 1 ) \boldsymbol{v'}=\boldsymbol{v_{\perp}'}+\boldsymbol{v_{\parallel}}\qquad(1) v=v+v(1)
將上圖垂直軸 u \boldsymbol{u} u 的平面投影如下圖:
在這裡插入圖片描述
可知表示式:
v ⊥ ′ = v ⊥ c o s θ + w s i n θ ( 2 ) \boldsymbol{v_{\perp}'}=\boldsymbol{v_{\perp}}cos\theta+\boldsymbol{w}sin\theta \qquad(2) v=vcosθ+wsinθ(2)

這裡 ∣ ∣ w ∣ ∣ = ∣ ∣ v ⊥ ∣ ∣ ||\boldsymbol{w}||= ||\boldsymbol{v_{\perp}}|| w=v 且 與 v ⊥ \boldsymbol{v_{\perp}} v u \boldsymbol{u} u 垂直,則可通過 v ⊥ \boldsymbol{v_{\perp}} v u \boldsymbol{u} u 叉乘獲得:
w = v ⊥ × u ∣ ∣ u ∣ ∣ \boldsymbol{w}= \boldsymbol{v_{\perp}} \times \frac{ \boldsymbol{u}}{ ||\boldsymbol{u}||} w=v×uu
由旋轉軸大小不重要,則令其模長為1: ∣ ∣ u ∣ ∣ = 1 ||\boldsymbol{u}||=1 u=1 則有:
w = v ⊥ × u ( 3 ) \boldsymbol{w}= \boldsymbol{v_{\perp}} \times \boldsymbol{u}\qquad(3) w=v×u(3)
此時,也可得出 v ⊥ \boldsymbol{v_{\perp}} v v ∥ \boldsymbol{v_{\parallel}} v 的表示式:

v ∥ = v ⋅ u ( 4 ) \boldsymbol{v_{\parallel}} = \boldsymbol{v} \cdot \boldsymbol{u}\qquad(4) v=vu(4)

v ⊥ = v − v ⋅ u ( 5 ) \boldsymbol{v_{\perp}} = \boldsymbol{v} - \boldsymbol{v} \cdot \boldsymbol{u}\qquad(5) v=vvu(5)
聯立式 ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) (1)(2)(3)(4)(5) (1)(2)(3)(4)(5)可得:

v ′ = v c o s θ + ( 1 − c o s θ ) ( v ⋅ u ) ⋅ u + v × u s i n θ ( 5 ) \boldsymbol{v'} = \boldsymbol{v}cos\theta +(1-cos\theta)( \boldsymbol{v} \cdot \boldsymbol{u})\cdot \boldsymbol{u} +\boldsymbol{v} \times\boldsymbol{u}sin\theta\qquad(5) v=vcosθ+(1cosθ)(vu)u+v×usinθ(5)
這個式子直觀的將變數和旋轉結果展示出來,符合我們的思維,這個式子是我們稍後四元數旋轉的基礎。

四元數旋轉!

一個奇妙的運算

兩個一般的四元數 q 1 = a + b i + c j + d k q_{1}=a+b\boldsymbol{i}+c\boldsymbol{j}+d\boldsymbol{k} q1=a+bi+cj+dk q 2 = e + f i + g j + h k q_{2}=e+f\boldsymbol{i}+g\boldsymbol{j}+h\boldsymbol{k} q2=e+fi+gj+hk相乘,運用之前提到的乘法運算規則,整理結果如下:
四元數相乘
換一種表示方法,更清楚規律為何:
q 1 = [ a , v ] ( v = [ b c d ] ) q_{1}=[ a,\boldsymbol{v}] (\boldsymbol{v}= \begin{bmatrix} b\\ c\\ d\\ \end{bmatrix}) q1=[a,v](v=bcd)
q 2 = [ e , u ] ( u = [ f g h ] ) q_{2}=[ e,\boldsymbol{u}] (\boldsymbol{u}= \begin{bmatrix} f\\ g\\ h\\ \end{bmatrix}) q2=[e,u](u=fgh)
轉化
本質源於四元數乘法運算的性質,我們得到如下表示式:

q 1 q 2 = [ a e − v u , e v + a u + v × u ] ( v = [ b c d ] , u = [ f g h ] ) ( 6 ) q_{1}q_{2}=[ ae-\boldsymbol{v}\boldsymbol{u},e\boldsymbol{v}+a\boldsymbol{u}+\boldsymbol{v}\times\boldsymbol{u}] (\boldsymbol{v}= \begin{bmatrix} b\\ c\\ d\\ \end{bmatrix}, \boldsymbol{u}= \begin{bmatrix} f\\ g\\ h\\ \end{bmatrix})\qquad(6) q1q2=[aevu,ev+au+v×u](v=bcd,u=fgh)(6)

三維 → \rightarrow 四維

從三維推廣到四維,首先簡化問題,把需要旋轉的四元數 v v v v = [ 0 , v ] v=[0,\boldsymbol{v}] v=[0,v] ,則對應有:
v ⊥ = [ 0 , v ⊥ ] v ∥ = [ 0 , v ∥ ] u = [ 0 , u ] v_{\perp}=[0,\boldsymbol{v_{\perp}}]\qquad v_{\parallel}=[0,\boldsymbol{v_{\parallel}}]\qquad u=[0,\boldsymbol{u}] v=[0,v]v=[0,v]u=[0,u]
v ⊥ ′ = [ 0 , v ⊥ ′ ] v ∥ ′ = [ 0 , v ∥ ′ ] v ′ = [ 0 , v ′ ] v_{\perp}'=[0,\boldsymbol{v_{\perp}'}]\qquad v_{\parallel}'=[0,\boldsymbol{v_{\parallel}'}]\qquad v'=[0,\boldsymbol{v'}] v=[0,v]v=[0,v]v=[0,v]

將其代入式 ( 2 ) (2) (2)可得:

v ⊥ ′ = v ⊥ c o s θ + w s i n θ ( 7 ) {v_{\perp}'}={v_{\perp}}cos\theta+{w}sin\theta \qquad(7) v=vcosθ+wsinθ(7)
w = [ 0 , w ] ( w = u × v ⊥ ) w=[0,\boldsymbol{w}] (\boldsymbol{w}=\boldsymbol{u}\times\boldsymbol{v_{\perp}}) w=[0,w](w=u×v)
而根據式 ( 6 ) (6) (6)計算四元數 u u u v ⊥ v_{\perp} v相乘恰有:

u v ⊥ = [ − u ⋅ v ⊥ , u × v ⊥ ] uv_{\perp}=[-\boldsymbol{u}\cdot\boldsymbol{v_{\perp}},\boldsymbol{u}\times\boldsymbol{v_{\perp}}] uv=[uv,u×v]
v \boldsymbol{v} v u \boldsymbol{u} u 在同一平面,故 v ⊥ \boldsymbol{v_{\perp}} v 垂直於此平面,即 v ⊥ ⋅ u = 0 \boldsymbol{v_{\perp}}\cdot\boldsymbol{u}=0 vu=0
原式化為:
u v ⊥ = [ 0 , u × v ⊥ ] = [ 0 , w ] uv_{\perp}=[0,\boldsymbol{u}\times\boldsymbol{v_{\perp}}]=[0,\boldsymbol{w} ] uv=[0,u×v]=[0,w]
即:
u v ⊥ = w ( 8 ) uv_{\perp}=w \qquad(8) uv=w(8)
聯立式 ( 7 ) ( 8 ) (7)(8) (7)(8)得:

v ⊥ ′ = v ⊥ c o s θ + u v ⊥ s i n θ {v_{\perp}'}={v_{\perp}}cos\theta+{uv_{\perp}}sin\theta v=vcosθ+uvsinθ

由分配律,化為:
v ⊥ ′ = ( c o s θ + u s i n θ ) v ⊥ ( 9 ) {v_{\perp}'}=(cos\theta+{u}sin\theta) v_{\perp}\qquad(9) v=(cosθ+usinθ)v(9)

q = c o s θ + u s i n θ = [ c o s θ , u s i n θ ] q=cos\theta+{u}sin\theta=[cos\theta,\boldsymbol{u}sin\theta] q=cosθ+usinθ=[cosθ,usinθ]

( 9 ) (9) (9)表示為:
v ⊥ ′ = q v ⊥ ( 9 ) {v_{\perp}'}=q v_{\perp}\qquad(9) v=qv(9)

由式 ( 1 ) (1) (1)推知:
v ′ = v ⊥ ′ + v ∥ ( 10 ) {v'}={v_{\perp}'}+{v_{\parallel}}\qquad(10) v=v+v(10)
聯立 ( 9 ) ( 10 ) (9)(10) (9)(10)得:
v ′ = q v ⊥ + v ∥ ( 10 ) {v'}=q v_{\perp}+{v_{\parallel}}\qquad(10) v=qv+v(10)

二倍角度來源

根據四元數乘法性質,推得:
q = [ c o s θ , u s i n θ ] q=[cos\theta,\boldsymbol{u}sin\theta] q=[cosθ,usinθ],則有
q 2 = q q = [ c o s 2 θ , u s i n 2 θ ] q^2=qq=[cos2\theta,\boldsymbol{u}sin2\theta] q2=qq=[cos2θ,usin2θ]

q = p 2 q=p^2 q=p2
將式 ( 10 ) (10) (10)化為:

v ′ = p p v ⊥ + p p − 1 v ∥ ( 11 ) {v'}=pp v_{\perp}+pp^-{1}{v_{\parallel}}\qquad(11) v=ppv+pp1v(11)

與線性代數中的性質相似,這裡 ∣ ∣ p ∣ ∣ = 1 ||p||=1 p=1,有:
p − 1 = p ∗ ( 12 ) p^{-1}=p*\qquad(12) p1=p(12)

( 11 ) (11) (11)化為:

v ′ = p p v ⊥ + p p ∗ v ∥ ( 13 ) {v'}=pp v_{\perp}+pp^{*}{v_{\parallel}}\qquad(13) v=ppv+ppv(13)

通過式 ( 6 ) (6) (6),我們可得兩個結論:
q 1 q 2 = [ a e − v u , e v + a u + v × u ] ( 6 ) q_{1}q_{2}=[ ae-\boldsymbol{v}\boldsymbol{u},e\boldsymbol{v}+a\boldsymbol{u}+\boldsymbol{v}\times\boldsymbol{u}] \qquad(6) q1q2=[aevu,ev+au+v×u](6)

  1. 對於 v ∥ = [ 0 , v ∥ ] v_{\parallel}=[0,\boldsymbol{v_{\parallel}}] v=[0,v], q = [ α , β u ] q=[\alpha,\beta \boldsymbol{u}] q=[α,βu],其中 v ∥ ∥ q v_{\parallel}\parallel q vq,則有:
    q v ∥ = v ∥ q ( 14 ) qv_{\parallel}=v_{\parallel}q\qquad(14) qv=vq(14)
  2. 對於 v ⊥ = [ 0 , v ∥ ] v_{\perp}=[0,\boldsymbol{v_{\parallel}}] v=[0,v], q = [ α , β u ] q=[\alpha,\beta \boldsymbol{u}] q=[α,βu],其中 v ⊥ ⊥ q v_{\perp}\perp q vq,則有:
    q v ⊥ = v ⊥ q ∗ ( 15 ) qv_{\perp}=v_{\perp}q* \qquad(15) qv=vq(15)

聯立式 ( 13 ) ( 14 ) ( 15 ) (13)(14)(15) (13)(14)(15)得:
v ′ = p v ⊥ p ∗ + p v ∥ p ∗ {v'}=p v_{\perp}p*+p{v_{\parallel}}p^{*} v=pvp+pvp
由式 ( 12 ) (12) (12)
v ′ = p v ⊥ p − 1 + p v ∥ p − 1 {v'}=p v_{\perp}p^{-1}+p{v_{\parallel}}p^{-1} v=pvp1+pvp1

整理得:
v ′ = p ( v ⊥ + v ∥ ) p − 1 {v'}=p( v_{\perp}+{v_{\parallel}})p^{-1} v=p(v+v)p1
最終即為:
v ′ = p v p − 1 {v'}=pvp^{-1} v=pvp1

正是互動網頁所顯示的表示式!
網頁截圖

相關文章