任务
之前在了解关于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,z∈R)
将
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⊥′=v⊥cosθ+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⊥×∣∣u∣∣u
由旋转轴大小不重要,则令其模长为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 ∥ = ( u ⋅ v ) u ( 4 ) \boldsymbol{v_{\parallel}} =( \boldsymbol{u} \cdot \boldsymbol{v})\boldsymbol{u}\qquad(4) v∥=(u⋅v)u(4)
v
⊥
=
v
−
(
u
⋅
v
)
u
(
5
)
\boldsymbol{v_{\perp}} = \boldsymbol{v} - ( \boldsymbol{u} \cdot \boldsymbol{v})\boldsymbol{u}\qquad(5)
v⊥=v−(u⋅v)u(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θ+(1−cosθ)(v⋅u)⋅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=[ae−vu,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⊥′=v⊥cosθ+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⊥=[−u⋅v⊥,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
v⊥⋅u=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⊥′=v⊥cosθ+uv⊥sinθ
由分配律,化为:
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⊥+pp−1v∥(11)
与线性代数中的性质相似,这里 ∣ ∣ p ∣ ∣ = 1 ||p||=1 ∣∣p∣∣=1,有:
p − 1 = p ∗ ( 12 ) p^{-1}=p*\qquad(12) p−1=p∗(12)
式 ( 11 ) (11) (11)化为:
v ′ = p p v ⊥ + p p ∗ v ∥ ( 13 ) {v'}=pp v_{\perp}+pp^{*}{v_{\parallel}}\qquad(13) v′=ppv⊥+pp∗v∥(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=[ae−vu,ev+au+v×u](6)
- 对于 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 v∥∥q,则有:
q v ∥ = v ∥ q ( 14 ) qv_{\parallel}=v_{\parallel}q\qquad(14) qv∥=v∥q(14)- 对于 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 v⊥⊥q,则有:
q v ⊥ = v ⊥ q ∗ ( 15 ) qv_{\perp}=v_{\perp}q* \qquad(15) qv⊥=v⊥q∗(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′=pv⊥p∗+pv∥p∗
由式
(
12
)
(12)
(12):
v
′
=
p
v
⊥
p
−
1
+
p
v
∥
p
−
1
{v'}=p v_{\perp}p^{-1}+p{v_{\parallel}}p^{-1}
v′=pv⊥p−1+pv∥p−1
整理得:
v
′
=
p
(
v
⊥
+
v
∥
)
p
−
1
{v'}=p( v_{\perp}+{v_{\parallel}})p^{-1}
v′=p(v⊥+v∥)p−1
最终即为:
v
′
=
p
v
p
−
1
{v'}=pvp^{-1}
v′=pvp−1
正是交互网页所显示的表达式!