参考资料:https://krasjet.github.io/quaternion/quaternion.pdf
一、二维空间与复数
-
已知复数 z = a + b i z=a+bi z=a+bi,我们规定其向量表示形式为 [ a b ] \left [ \begin{matrix}a\\b\end{matrix}\right ] [ab]。我们可以将其看成是复数域的两个基底 { 1 , i } \{1,i\} {1,i}的各自系数
-
对于复数 z 1 = a + b i , z 2 = c + d i z_1=a+bi,z_2=c+di z1=a+bi,z2=c+di,它们的乘积是 z 1 z 2 = ( a c − b d ) + ( b c + a d ) i = [ a − b b a ] [ c d ] z_1z_2=(ac-bd)+(bc+ad)i=\left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]\left [ \begin{matrix}c\\d\end{matrix}\right ] z1z2=(ac−bd)+(bc+ad)i=[ab−ba][cd]
对于这个结果,其右侧的 [ c d ] \left [ \begin{matrix}c\\d\end{matrix}\right ] [cd]是 z 2 z_2 z2的向量形式,而左边则是 z 1 z_1 z1的矩阵表示形式 我们可以做一些尝试,比如 z 1 z 2 = [ a − b b a ] [ c − d d c ] = [ a c − b d − a d − b c a d + b c a c − b d ] z_1z_2=\left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]\left [ \begin{matrix}c&-d\\d&c\end{matrix}\right ]=\left [ \begin{matrix}ac-bd&-ad-bc\\ad+bc&ac-bd\end{matrix}\right ] z1z2=[ab−ba][cd−dc]=[ac−bdad+bc−ad−bcac−bd],所以复数相乘就是各自的矩阵形式相乘的结果
同时可以验证复数相乘时的交换律、结合律、分配律、 i 2 = − 1 i^2=-1 i2=−1等
-
复数的共轭 z ‾ = a − b i \overline{z}=a-bi z=a−bi,复数的模长 ∥ z ∥ = a 2 + b 2 = z z ‾ \left\| z\right\|=\sqrt{a^2+b^2}=\sqrt{z\overline{z}} ∥z∥=a2+b2=zz
-
复数的旋转可以从矩阵表示中窥见一二,对于复数 z = a + b i z=a+bi z=a+bi,考虑其矩阵表示 [ a − b b a ] = a 2 + b 2 [ a a 2 + b 2 − b a 2 + b 2 b a 2 + b 2 a a 2 + b 2 ] \left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]=\sqrt{a^2+b^2}\left [ \begin{matrix}\frac {a}{\sqrt{a^2+b^2}}&-\frac b {\sqrt{a^2+b^2}}\\ \frac b {\sqrt{a^2+b^2}}&\frac a {\sqrt{a^2+b^2}}\end{matrix}\right ] [ab−ba]=a2+b2[a2+b2aa2+b2b−a2+b2ba2+b2a]
将复数 z z z投射到复数坐标轴中,可以看到其矩阵表示可以表示为 [ ∥ z ∥ 0 0 ∥ z ∥ ] [ cos θ − sin θ sin θ cos θ ] \left [ \begin{matrix}\left\| z\right\|&0\\0&\left\| z\right\|\end{matrix}\right ]\left [ \begin{matrix}\cos \theta&-\sin \theta \\ \sin \theta&\cos \theta\end{matrix}\right ] [∥z∥00∥z∥][cosθsinθ−sinθcosθ]
其中 [ ∥ z ∥ 0 0 ∥ z ∥ ] \left [ \begin{matrix}\left\| z\right\|&0\\0&\left\| z\right\|\end{matrix}\right ] [∥z∥00∥z∥]是经典的放缩矩阵, [ cos θ − sin θ sin θ cos θ ] \left [ \begin{matrix}\cos \theta&-\sin \theta \\ \sin \theta&\cos \theta\end{matrix}\right ] [cosθsinθ−sinθcosθ]是经典的旋转矩阵,所以复数相乘<=>对应矩阵形式相乘<=>旋转与缩放变换的复合
同时可以验证,2D空间下的旋转是可以复合的,与次序无关。
二、三维空间下的旋转
定义:先假定旋转轴经过原点(如果不经过原点,则将旋转轴与待旋转物体 平移至旋转轴经过原点,完成旋转后再平移回去),这个旋转轴的单位向量是
u
=
(
x
,
y
,
z
)
T
\mathbf{u}=(x,y,z)^T
u=(x,y,z)T,待旋转物体我们简化为一个向量
v
\mathbf{v}
v,旋转角度为(逆时针方向)
θ
θ
θ,注意接下来所有的分析与推导都是右手坐标系
向量分解
对待旋转向量进行分解
v
=
v
∥
+
v
⊥
\mathbf{v}=\mathbf{v}_{\Vert}+\mathbf{v}_{\perp }
v=v∥+v⊥,分别为“平行于旋转轴
u
\mathbf{u}
u的分量”和“垂直于旋转轴
u
\mathbf{u}
u的分量”
其中“平行于旋转轴
u
\mathbf{u}
u的分量”是待旋转向量的投影,也即
v
∥
=
(
u
⋅
v
)
u
\mathbf{v}_{\Vert}=(\mathbf{u}\cdot\mathbf{v})\mathbf{u}
v∥=(u⋅v)u;又由向量加减计算出垂直于旋转轴
u
\mathbf{u}
u的分量”,也即
v
⊥
=
v
−
v
∥
=
v
−
(
u
⋅
v
)
u
\mathbf{v}_{\perp}=\mathbf{v}-\mathbf{v}_{\Vert}=\mathbf{v}-(\mathbf{u}\cdot\mathbf{v})\mathbf{u}
v⊥=v−v∥=v−(u⋅v)u
易知 v ∥ \mathbf{v}_{\Vert} v∥旋转多少度都不会发生变化,所以我们只需要考虑 v ⊥ \mathbf{v}_{\perp} v⊥的旋转结果
在右手坐标系下,用叉乘计算出垂直于
v
⊥
,
u
\mathbf{v}_{\perp},\mathbf{u}
v⊥,u所在平面的另一向量
w
=
u
×
v
⊥
\mathbf{w}=\mathbf{u}\times\mathbf{v}_{\perp}
w=u×v⊥,那么把
v
⊥
,
w
\mathbf{v}_{\perp},\mathbf{w}
v⊥,w分别看成是二维平面的
X
,
Y
X,Y
X,Y轴,那么旋转后的向量
v
⊥
′
\mathbf{v}'_{\perp}
v⊥′的计算结果显而易见:
v
⊥
′
=
v
⊥
cos
θ
+
(
u
×
v
⊥
)
sin
θ
=
v
⊥
cos
θ
+
(
u
×
v
)
sin
θ
\mathbf{v}'_{\perp}=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v}_{\perp})\sin \theta=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v})\sin \theta
v⊥′=v⊥cosθ+(u×v⊥)sinθ=v⊥cosθ+(u×v)sinθ
其中第二个等号来自叉乘的分配率
u
×
v
⊥
=
u
×
(
v
−
v
∥
)
=
u
×
v
−
u
×
v
∥
=
u
×
v
\mathbf{u}\times\mathbf{v}_{\perp}=\mathbf{u}\times(\mathbf{v}-\mathbf{v}_{\Vert})=\mathbf{u}\times\mathbf{v}-\mathbf{u}\times\mathbf{v}_{\Vert}=\mathbf{u}\times\mathbf{v}
u×v⊥=u×(v−v∥)=u×v−u×v∥=u×v
将两分量进行组合后,可得旋转后的向量 v ′ = cos θ v + ( 1 − cos θ ) ( u ⋅ v ) u + sin θ ( u × v ) \mathbf{v}'=\cos\theta\mathbf{v}+(1-\cos\theta)(\mathbf{u}\cdot\mathbf{v})\mathbf{u}+\sin\theta(\mathbf{u}\times\mathbf{v}) v′=cosθv+(1−cosθ)(u⋅v)u+sinθ(u×v)
三、四元数
四元数的定义与复数类似,但四元数有三个虚部和一个实部,也即四元数
q
=
a
+
b
i
+
c
j
+
d
k
q=a+bi+cj+dk
q=a+bi+cj+dk,其中
a
,
b
,
c
,
d
a,b,c,d
a,b,c,d均为实数,而
i
,
j
,
k
i,j,k
i,j,k是虚基,满足
i
2
=
j
2
=
k
2
=
i
j
k
=
−
1
i^2=j^2=k^2=ijk=-1
i2=j2=k2=ijk=−1
类似地,四元数也可以写成向量形式
q
=
[
a
b
c
d
]
=
[
a
,
v
]
,其中
v
=
[
b
c
d
]
q=\left [\begin{matrix}a\\b\\c\\d\end{matrix}\right]=[a,\mathbf{v}],其中\mathbf{v}=\left [\begin{matrix}b\\c\\d\end{matrix}\right]
q=
abcd
=[a,v],其中v=
bcd
由
i
2
=
j
2
=
k
2
=
i
j
k
=
−
1
i^2=j^2=k^2=ijk=-1
i2=j2=k2=ijk=−1,我们可以推出
i
j
=
k
,
k
j
=
−
i
,
i
k
=
−
j
ij=k,kj=-i,ik=-j
ij=k,kj=−i,ik=−j,全部结果如下所示(列为左乘,行为右乘)
四元数的模长、加法、数乘与复数基本类似,但乘法不一样,四元数的乘法满足分配率和结合律,但不满足交换律
具体来说,对于 q 1 = [ a 1 b 1 c 1 d 1 ] = [ a 1 , v 1 ] , q 2 = [ a 2 b 2 c 2 d 2 ] = [ a 2 , v 2 ] q_1=\left [\begin{matrix}a_1\\b_1\\c_1\\d_1\end{matrix}\right]=[a_1,\mathbf{v}_1],q_2=\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_2,\mathbf{v}_2] q1= a1b1c1d1 =[a1,v1],q2= a2b2c2d2 =[a2,v2],其中 v 1 = [ b 1 c 1 d 1 ] , v 2 = [ b 2 c 2 d 2 ] \mathbf{v}_1=\left [\begin{matrix}b_1\\c_1\\d_1\end{matrix}\right],\mathbf{v}_2=\left [\begin{matrix}b_2\\c_2\\d_2\end{matrix}\right] v1= b1c1d1 ,v2= b2c2d2 ,他们的乘积结果为
q 1 q 2 = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 − d 1 c 1 c 1 d 1 a 1 − b 1 d 1 − c 1 b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] = [ a 1 a 2 − v 1 ⋅ v 2 , a 1 v 2 + a 2 v 1 + v 1 × v 2 ] q_1q_2=\left [\begin{matrix}a_1&-b_1&-c_1&-d_1\\ b_1&a_1&-d_1&c_1\\ c_1&d_1&a_1&-b_1\\ d_1&-c_1&b_1&a_1\end{matrix}\right ]\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_1a_2-\mathbf{v}_1\cdot \mathbf{v}_2,a_1\mathbf{v}_2+a_2\mathbf{v}_1+\mathbf{v}_1\times \mathbf{v}_2] q1q2= a1b1c1d1−b1a1d1−c1−c1−d1a1b1−d1c1−b1a1 a2b2c2d2 =[a1a2−v1⋅v2,a1v2+a2v1+v1×v2]
注意上式左边的矩阵各系数是由 { 1 , i , j , k } \{1,i,j,k\} {1,i,j,k}乘积结果的 4 × 4 4\times 4 4×4计算表格得出的。
与左乘类似,四元数的右乘也可以写成矩阵形式
q
2
q
1
=
[
a
1
−
b
1
−
c
1
−
d
1
b
1
a
1
d
1
−
c
1
c
1
−
d
1
a
1
b
1
d
1
c
1
−
b
1
a
1
]
[
a
2
b
2
c
2
d
2
]
=
[
a
1
a
2
−
v
1
⋅
v
2
,
a
1
v
2
+
a
2
v
1
−
v
1
×
v
2
]
q_2q_1=\left [\begin{matrix}a_1&-b_1&-c_1&-d_1\\ b_1&a_1&d_1&-c_1\\ c_1&-d_1&a_1&b_1\\ d_1&c_1&-b_1&a_1\end{matrix}\right ]\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_1a_2-\mathbf{v}_1\cdot \mathbf{v}_2,a_1\mathbf{v}_2+a_2\mathbf{v}_1-\mathbf{v}_1\times \mathbf{v}_2]
q2q1=
a1b1c1d1−b1a1−d1c1−c1d1a1−b1−d1−c1b1a1
a2b2c2d2
=[a1a2−v1⋅v2,a1v2+a2v1−v1×v2]
引入概念:纯四元数,意为实部为0的四元数,也即
v
=
[
0
,
v
]
v=[0,\mathbf{v}]
v=[0,v],我们用
v
v
v来表示一个纯四元数
[
0
,
v
]
[0,\mathbf{v}]
[0,v]
引入概念:四元数的逆,对于一个四元数
q
q
q来说,其逆
q
−
1
q^{-1}
q−1满足
q
q
−
1
=
q
−
1
q
=
1
qq^{-1}=q^{-1}q=1
qq−1=q−1q=1
引入概念:四元数的共轭,对于一个四元数
q
q
q来说,其共轭
q
∗
=
[
a
,
−
v
]
q^{*}=[a,-\mathbf{v}]
q∗=[a,−v],所以根据上面推导的四元数的乘法可得
q
∗
q
=
q
q
∗
=
[
a
2
+
v
⋅
v
,
0
]
=
∥
q
∥
2
q^{*}q=qq^{*}=[a^2+\mathbf{v}\cdot \mathbf{v},0]=\Vert q\Vert^2
q∗q=qq∗=[a2+v⋅v,0]=∥q∥2
所以建立起逆和共轭的关系: q − 1 = q ∗ ∥ q ∥ 2 q^{-1}=\cfrac{q^*}{\Vert q\Vert^2} q−1=∥q∥2q∗,且当 q q q为单位四元数( ∥ q ∥ 2 = 1 \Vert q\Vert^2=1 ∥q∥2=1)时,其共轭与逆相等。
现在考虑用四元数来建立表示向量
v
\mathbf{v}
v的垂直部分
v
⊥
\mathbf{v}_{\perp}
v⊥绕旋转轴
u
\mathbf{u}
u的旋转过程:
将三维向量划归为纯四元数
v
⊥
=
[
0
,
v
⊥
]
,
v
⊥
′
=
[
0
,
v
⊥
′
]
,
v
=
[
0
,
v
]
,
u
=
[
0
,
u
]
v_{\perp}=[0,\mathbf{v}_{\perp}],v'_{\perp}=[0,\mathbf{v}'_{\perp}],v=[0,\mathbf{v}],u=[0,\mathbf{u}]
v⊥=[0,v⊥],v⊥′=[0,v⊥′],v=[0,v],u=[0,u]
又根据四元数乘法可得 u v ⊥ = [ − u ⋅ v ⊥ , u × v ⊥ ] = [ 0 , u × v ⊥ ] uv_{\perp}=[-\mathbf{u}\cdot\mathbf{v}_{\perp},\mathbf{u}\times\mathbf{v}_{\perp}]=[0,\mathbf{u}\times\mathbf{v}_{\perp}] uv⊥=[−u⋅v⊥,u×v⊥]=[0,u×v⊥]
最后将第二节中的垂直分量旋转后的计算结果
v
⊥
′
=
v
⊥
cos
θ
+
(
u
×
v
⊥
)
sin
θ
\mathbf{v}'_{\perp}=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v}_{\perp})\sin \theta
v⊥′=v⊥cosθ+(u×v⊥)sinθ转化为四元数的形式
v
⊥
′
=
v
⊥
cos
θ
+
u
v
⊥
sin
θ
v'_{\perp}=v_{\perp}\cos\theta+uv_{\perp}\sin \theta
v⊥′=v⊥cosθ+uv⊥sinθ
定义四元数
q
=
[
cos
θ
,
sin
θ
u
]
q=[\cos\theta,\sin\theta \mathbf{u}]
q=[cosθ,sinθu],则
v
⊥
′
=
q
v
⊥
v'_{\perp}=qv_{\perp}
v⊥′=qv⊥,且有
v
′
=
v
∥
+
q
v
⊥
v'=v_{\Vert}+qv_{\perp}
v′=v∥+qv⊥
如何把形式更进一步?
考虑
p
=
[
cos
θ
2
,
sin
θ
2
u
]
p=[\cos\frac \theta 2,\sin \frac \theta 2\mathbf{u}]
p=[cos2θ,sin2θu],则有
p
2
=
[
cos
2
θ
2
−
sin
2
θ
2
,
2
sin
θ
2
cos
θ
2
u
]
=
[
cos
θ
,
sin
θ
u
]
=
q
p^2=[\cos^2\frac \theta 2-\sin^2\frac \theta 2,2\sin\frac \theta 2\cos\frac \theta 2\mathbf{u}]=[\cos\theta,\sin\theta\mathbf{u}]=q
p2=[cos22θ−sin22θ,2sin2θcos2θu]=[cosθ,sinθu]=q,
且
∥
p
∥
=
1
,
p
−
1
=
p
∗
∥
p
∥
2
=
p
∗
=
[
cos
θ
2
,
−
sin
θ
2
u
]
\Vert p\Vert =1,p^{-1}=\cfrac{p^*}{\Vert p\Vert^2}=p^{*}=[\cos\frac \theta 2,-\sin \frac \theta 2\mathbf{u}]
∥p∥=1,p−1=∥p∥2p∗=p∗=[cos2θ,−sin2θu]
因此有
v
′
=
v
∥
+
q
v
⊥
=
p
p
∗
v
∥
+
p
p
v
⊥
v'=v_{\Vert}+qv_{\perp}=pp^{*}v_{\Vert}+ppv_{\perp}
v′=v∥+qv⊥=pp∗v∥+ppv⊥
这个公式的几何解释:平行于旋转轴的分量不变,将垂直分量连续2次旋转 θ 2 \frac \theta 2 2θ的角度
对于
p
∗
v
∥
p^{*}v_{\Vert}
p∗v∥,由于
v
∥
×
u
=
0
\mathbf{v}_{\Vert}\times \mathbf{u}=0
v∥×u=0,所以其满足交换律
p
∗
v
∥
=
v
∥
p
∗
p^{*}v_{\Vert}=v_{\Vert}p^{*}
p∗v∥=v∥p∗
对于
p
v
⊥
pv_{\perp}
pv⊥,由于
v
⊥
×
u
=
−
u
×
v
⊥
\mathbf{v}_{\perp}\times \mathbf{u}=-\mathbf{u}\times \mathbf{v}_{\perp}
v⊥×u=−u×v⊥和
v
⊥
⋅
u
=
0
\mathbf{v}_{\perp}\cdot\mathbf{u}=0
v⊥⋅u=0,所以有
p
v
⊥
=
v
⊥
p
∗
pv_{\perp}=v_{\perp}p^*
pv⊥=v⊥p∗
经过代换后,由分配率可得
v
′
=
p
(
v
∥
+
v
⊥
)
p
∗
=
p
v
p
∗
v'=p(v_{\Vert}+v_{\perp})p^*=pvp^*
v′=p(v∥+v⊥)p∗=pvp∗
总结一下,对于三维空间下的旋转,假定旋转轴经过原点(如果不经过,则对旋转轴与待旋转点一起平移),其所在直线的单位向量为
u
\mathbf{u}
u,待旋转点为
v
\mathbf{v}
v,旋转角度为(逆时针)
θ
\theta
θ,旋转后的点为
v
′
\mathbf{v}'
v′,那么定义四元数
v
=
[
0
,
v
]
,
v
′
=
[
0
,
v
′
]
,
u
=
[
0
,
u
]
,
p
=
[
cos
θ
2
,
sin
θ
2
u
]
v=[0,\mathbf{v}],v'=[0,\mathbf{v}'],u=[0,\mathbf{u}],p=[\cos\frac \theta 2,\sin\frac \theta 2\mathbf{u}]
v=[0,v],v′=[0,v′],u=[0,u],p=[cos2θ,sin2θu],则旋转后的点位置为
v
′
=
p
v
p
∗
v'=pvp^*
v′=pvp∗
进一步考虑矩阵形式,令
a
=
cos
θ
2
,
b
=
sin
θ
2
u
x
,
c
=
sin
θ
2
u
y
,
d
=
sin
θ
2
u
z
a=\cos \frac \theta 2,b=\sin\frac \theta 2u_x,c=\sin\frac \theta 2u_y,d=\sin\frac \theta 2u_z
a=cos2θ,b=sin2θux,c=sin2θuy,d=sin2θuz
则
a
2
+
b
2
+
c
2
+
d
2
=
1
a^2+b^2+c^2+d^2=1
a2+b2+c2+d2=1,且由左乘和右乘矩阵的
v
′
=
p
v
p
∗
=
[
a
−
b
−
c
−
d
b
a
−
d
c
c
d
a
−
b
d
−
c
b
a
]
[
a
−
b
−
c
−
d
b
a
d
−
c
c
−
d
a
b
d
c
−
b
a
1
]
v
=
[
1
0
0
0
0
1
−
2
c
2
−
2
d
2
2
b
c
−
2
a
d
2
a
c
+
2
b
d
0
2
b
c
+
2
a
d
1
−
2
b
2
−
2
d
2
2
c
d
−
2
a
b
0
2
b
d
−
2
a
c
2
a
b
+
2
c
d
1
−
2
b
2
−
2
c
2
]
v
v'=pvp^*=\left [\begin{matrix}a&-b&-c&-d\\ b&a&-d&c\\ c&d&a&-b\\ d&-c&b&a\end{matrix}\right ] \left [\begin{matrix}a&-b&-c&-d\\ b&a&d&-c\\ c&-d&a&b\\ d&c&-b&a_1\end{matrix}\right ]v =\left [\begin{matrix}1&0&0&0\\ 0&1-2c^2-2d^2&2bc-2ad&2ac+2bd\\ 0&2bc+2ad&1-2b^2-2d^2&2cd-2ab\\ 0&2bd-2ac&2ab+2cd&1-2b^2-2c^2\end{matrix}\right ]v
v′=pvp∗=
abcd−bad−c−c−dab−dc−ba
abcd−ba−dc−cda−b−d−cba1
v=
100001−2c2−2d22bc+2ad2bd−2ac02bc−2ad1−2b2−2d22ab+2cd02ac+2bd2cd−2ab1−2b2−2c2
v