复数与二维旋转·
设复数 z1=a1+b1i, z2=a2+b2i,则
z1z2=(a1a2−b1b2)+(a1b2+a2b1)i
将这个结果写成矩阵相乘的形式,
z1z2=[a1b1−b1a1][a2b2]
说明 矩阵 R1=[a1b1−b1a1] 表示的几何变换与是复数乘法运算等价的。
一般地,向量 [ab] 在二维平面中对应一个直角三角形,两个直角边长度为 a 和 b,斜边长为 a2+b2,即向量的模长,矩阵 R=[ab−ba] 的每个元素同时除以模长,得到
R=a2+b2aa2+b2b−a2+b2ba2+b2a
设向量 [ab] 与 x 轴夹角为 θ,则 cosθ=a2+b2a, sinθ=a2+b2b.
R=[cosθsinθ−sinθcosθ]
与该矩阵相乘在二维平面上实现的效果是 被乘的向量绕原点逆时针旋转 θ.
由此可以发现,复数能够表示二维平面上的旋转,假设旋转角度为 θ,定义单位复数旋转因子为
q=cosθ+isinθ
被旋转的向量 z=a+ib,相乘得到被旋转 θ 后的复数为
z′=qz=(cosθ+isinθ)(a+ib)=(acosθ−bsinθ)+i(asinθ+bcosθ)
对应向量 [a,b] 在二维平面 x0y 中绕原点逆时针旋转了 θ.
四元数与三维旋转·
本文仅使用右手坐标系。
在三维空间中,向量 v 绕某个旋转轴 u, ∣u∣2=1 旋转,可以将向量 v 分解为平行于 u 的分量 v∥ 和垂直于 u 的分量 v⊥,然后分别旋转这两个向量,再合并得到最后结果。
其中
v∥v⊥=∣u∣2u⋅vu=(u⋅v)u=v−v∥=v−(u⋅v)u
v∥ 始终与 u 重合,旋转 θ 后的 v∥′=v∥=(u⋅v)u ;
v⊥ 始终与 u 垂直,它的旋转可以看作二维平面内的旋转,如下图所示,
⎩⎨⎧wv⊥′=u×v⊥=vv′+vw′=v⊥cosθ+wsinθ=v⊥cosθ+(u×v⊥)sinθ=v⊥cosθ+(u×(v−v∥))sinθ=v⊥cosθ+(u×v)sinθ
向量 v 绕旋转轴 u, 旋转的结果
v′=v⊥′+v∥′=v⊥cosθ+(u×v)sinθ+(u⋅v)u=vcosθ+(1−cosθ)(u⋅v)u+(u×v)sinθ
为了用“复数”形式表示类似的旋转,最简单的想法是在复数域再加一个维度,即在复数的基础上增加一个虚数 j,假设三维空间中的“复数”为
q1q2=a1+b1i+c1j=a2+b2i+c2j
显然,q1 与 q2 相乘得到的结果中包含 ij,ji 这些交叉乘积项,并没有已知定义(与 q1,q2 不在同一个向量空间中),因此不能表示三维空间中旋转的结果。
在二维平面中,向量可以在 x0y 平面旋转,只需要一个虚数,而在三维空间中,向量旋转等效于在 x0y,x0z,y0z 三个平面旋转,或许需要三个虚数表示才可以。
于是定义四元数,表示为 q=[s,v], s∈R,v∈R3,
q=s+xi+yj+zk
其中 i,j,k 表示三个维度,并且根据笛卡尔坐标系下的外积运算法则,定义
ij=k,jk=i,ki=jji=−k,kj=−i,ik=−ji2=j2=k2=ijk=−1
金雀花桥上的纪念石刻(图片来源于网络)
定义两个四元数
q1q2=s1+x1i+y1j+z1k=s2+x2i+y2j+z2k
令 a=x1i+y1j+z1k, b=x2i+y2j+z2k,相乘并化简得到
q1q2=(s1+x1i+y1j+z1k)(s2+x2i+y2j+z2k)=(s1s2−x1x2−y1y2−z1z2)+(s1x2+s2x1+y1z2−y2z1)i+(s1y2+s2y1−x1z2+x2z1)j+(s1z2+s2z1+x1y2−x2y1)k
其中
s1s2−x1x2−y1y2−z1z2=s1s2−a⋅b
其余部分将 s1,s2 提出,得到
⋯=s1(x2i+y2j+z2k)+s2(x1i+y1j+z1k)+(y1z2−y2z1)i+(z1x2−z2x1)j+(x1y2−x2y1)k=s1b+s2a+a×b
最后得到两个四元数相乘的结果为
q1q2=[s1s2−a⋅b,s1b+s2a+a×b]
也可以将相乘结果写成
q1q2=(s1+x1i+y1j+z1k)(s2+x2i+y2j+z2k)=(s1s2−x1x2−y1y2−z1z2)+(x1s2+s1x2−z1y2+y1z2)i+(y1s2+z1x2+s1y2−x1z2)j+(z1s2−y1x2+x1y2+s1z2)k
该乘法结果可以表示成矩阵形式
s1x1y1z1−x1s1z1−y1−y1−z1s1x1−z1y1−x1s1s2x2y2z2
与矩阵类似,四元数的乘法并不遵循交换律。类比矩阵的逆的定义,定义四元数乘法的逆运算为 q−1,满足
qq−1=q−1q=1, q=0
与复数的共轭类似,定义四元数 q=s+xi+yj+zk 的共轭为
q∗=s−xi−yj−zk
满足
qq∗=s2+v⋅v=s2+x2+y2+z2=∣∣q∣∣2
则有
qq−1q∗qq−1∣∣q∣∣2q−1q−1=1=q∗=q∗=∣∣q∣∣2q∗
并且对于单位四元数来说,q−1=q∗.
回到最初讨论的三维空间中的旋转问题,令 s1=0,q1=x1i+y1j+z1k,q1 表示三维空间的向量,相乘结果为
q1q2=[−a⋅b,s2a+a×b]
为了使得旋转后的结果仍为三维向量,需要满足 −a⋅b=0,即 a⊥b.
只有虚部的四元数称为纯四元数,表示为 [0,v],两个纯四元数的乘积为
v1v2=[0−v1⋅v2,0+v1×v2]=[−v1⋅v2,v1×v2]
基于前文向量 v 绕旋转轴 u 的讨论,将向量均用纯四元数表示
v=[0,v], v′=[0,v′]v⊥=[0,v⊥], v⊥′=[0,v⊥′]v∥=[0,v∥], v∥′=[0,v∥′]u=[0,u]
向量 v∥ 旋转后的结果
v∥′=v∥
向量 v⊥ 旋转后的结果
v⊥′=v⊥cosθ+(u×v⊥)sinθ
已知 uv⊥=[−u⋅v⊥,u×v⊥]=[0,u×v⊥],则
v⊥′=v⊥cosθ+(uv⊥)sinθ=(cosθ+sinθu)v⊥
由此可以得出,完成旋转 θ 这一变换的单位四元数可以构造为
q=cosθ+sinθu=[cosθ,sinθuxi+sinθuyj+sinθuzk], ∣q∣=1
单位向量 u 指向转轴方向,待转向量 v⊥ 正交于 u 时,将旋转变换用四元数形式改写为
v⊥′=qv⊥
一般地,
v′=v∥′+v⊥′=v∥+qv⊥
令 p=[cos21θ,sin21θu], ∣p∣=1,则
v′=pp−1v∥+ppv⊥=pp∗v∥+ppv⊥=pv∥p∗+pv⊥p∗=pvp∗
最终得出结论,任意向量 v 绕指向转轴方向的单位向量 u 旋转 θ,旋转后的 v′ 可以用下面运算得到
v′=qvq∗=qvq−1
其中 v=[0,v],q=[cos21θ,sin21θu], ∣q∣=1.
在表示二维平面中的旋转时,利用欧拉公式可以将旋转表示为指数形式 z′=eiθz,类似地,对于单位四元数 u=[0,u],有
euθ=cosθ+usinθ
于是前面四元数的旋转表达式可以写成
v′=qvq∗=qvq−1=eu2θve−u2θ
考察四元数 −q 的变换,
−qv′=[−cos21θ,−sin21θu]=[cos(π−21θ),sin(π−21θ)(−u)]=(−q)v(−q)∗=(−1)2qvq∗=qvq∗
与 q 的变换相同。从几何角度考虑,q 表示绕转轴旋转 θ,而 −q 表示绕相反的转轴旋转 2π−θ,所以说 单位四元数与三维旋转是一个二对一的满射同态关系。
四元数插值与三维旋转·
前置知识:线性插值
已知函数 f(x) 在两点的值,要获得其它点数值,
f(x)=f(x0)+x1−x0f(x1)−f(x0)(x−x0)
与函数的线性插值类似,下面讨论四元数的插值,用单位四元数 q1 表示第一个方向,q2 表示第二个方向,q 表示最终的方向。
与线性插值类似,当插值参数 t=0 时,插值的效果是将 q 旋转到 q1,当 t=1 时,插值的效果是将 q 旋转到 q2。
旋转的对象是角度,从指数形式 euθ 考虑,“线性插值”的对象是四元数的指数,类比写出四元数插值的形式
q=q1(Δq)t
其中 q1 与 q2 的角度差 Δq=q1−1q2,即
q=q1(q1−1q2)t
当插值系数 t=0 时,q=q1,当 t=1 时,q=q2。
注:四元数不止有一种定义形式,本文仅涉及 Hamilton 形式。
参考资料·
张小飞, 李建峰, 徐大专, 等.阵列信号处理及 MATLAB 实现[M].电子工业出版社,2020.(2.3 四元数理论)
Krasjet/quaternion
从复数乘法到旋转矩阵 - YourMath
讨论
评论