四元数

参考:(1)四元数(Quaternions) - 知乎 (zhihu.com);(2)四元数——旋转 - 知乎 (zhihu.com);(3⭐)四元数和旋转(Quaternion & rotation) - 知乎 (zhihu.com)

说明:文中所有用 ◻^ 标记的为四元数,用 ◻→ 标记的为普通向量;i 为虚数单位,i,j,k 为四元数单位。

1. 基本性质

定义四元数为

(1)q^=qw+qii+qjj+qkk=(qi,qj,qk,qw)=(q→v,qw)

其中 qw,qi,qj,qk 均为实数。其中 i,j,k 满足:

(2)i2=j2=k2=−1ij=−ji=kjk=−kj=iki=−ik=j

加、减、乘法由(1)(2)可推知。注意乘法不可交换。

定义四元数的共轭:

(3)q^∗=(−q→v,qw)

四元数的共轭有关系(不可交换线性算子的必然结果):

(4)(p^q^)∗=q^∗p^∗

模:

(5)||q^||=q^q^∗=q^∗q^

易知模必为正实数。

四元数也可看作是一个线性算子,故其逆有:q^−1q^=q^q^−1=1,利用式(4)可得:

(6)q^−1=1||q^||2q^=1q^∗q^q^

考虑 i 与单位纯四元数 q^v 的关系:

||q^v||=1⇒q^vq^v∗=−q^v2=1⇒q^v2=i2=−1

基于此拓展欧拉公式 eiθ=cos⁡θ+isin⁡θ。任何一个单位四元数都可以写作 cos⁡θ+q^vsin⁡θ,其中 q^v 为单位纯四元数。

(7)cos⁡θ+q^vsin⁡θ=eq^vθ

于是自然地得到四元数的对数:

(8)ln⁡q^=ln⁡c(cos⁡θ+q^vsin⁡θ)=ln⁡c+q^vθ

2.四元数与旋转

2.1 胡尔韦兹(Hurwitz)定理

赋范可除性代数只能同构于实数、复数、四元数、八元数。

赋范可除性代数:代数中的元素满足 ||a⊗b||=||a||⋅||b||,其中 ⊗ 为该空间对应的乘法。四元数是满足该性质的。

这个性质别看简单,但基本上算是非常核心的一个性质。为什么我要用四元数表示旋转?旋转最本质的特点是什么,就是不改变相对距离,你转个手臂不可能转个60度手变长了。用数学公式说明,就是假如x是单位四元数,当我一个任意向量y通过x进行旋转后,模长是不会发生变化的。因此,赋范可除代数的应用就在这。

(2)

2.2 矢量在空间中的旋转

先考虑一个矢量 p→ 绕轴 a→(单位向量)旋转 θ:

(9)p→′=p→cos⁡θ+(a→×p→)sin⁡θ+(a→⋅p→)a→(1−cos⁡θ)

证明:记 p→ 沿 a→ 方向的分量为 p→//=(a→⋅p→)a→,p→⊥=p→−p→//

p→′=p→//+p→⊥cos⁡θ+(a→×p→⊥)sin⁡θ

代入即得。QED

2.3 四元数表示旋转

旋转函数 ϕ 总应该满足如下三个性质:

  1. 长度不变:||ϕ(A)||=||A||

  2. 夹角不变:ϕ(A)⋅ϕ(B)=A⋅B

  3. 手性不变:ϕ(A)×ϕ(B)=A×B

满足这三条性质的函数即为旋转函数。这里的 A,B 不打箭头,是因为它们即可以是矢量,也可以是纯四元数。仿照矢量的点乘和叉乘,定义存四元数的点乘和叉乘。

(10)p^⋅q^=piqi+pjqj+pkqkp^×q^=|ijkpipjpkqiqjqk|

容易推导,纯四元数之间的乘法:

(11)p^q^=−p^⋅q^+p^×q^

考虑函数 ϕq^(p^)=q^p^q^−1,它(可以)是一个纯四元数到纯四元数的映射。

证明:若 p^ 是纯四元数,p^+p^∗=0

ϕq^(p^)+ϕq^(p^)∗=q^p^q^−1+(q^p^q^−1)∗=q^p^q^−1+(q^−1)∗p^∗q^∗=q^p^q^−1+q^p^∗q^−1=q^(p^+p^∗)q^−1=0

故 ϕq^(p^) 也为纯四元数。QED

同时 ϕq^ 也满足

1.   ||ϕq^(p^)||=||q^||⋅||p^||⋅||q^−1||=||p^||2.   ϕq^(p^)ϕq^(r^)=q^p^q^−1q^r^q^−1=q^p^r^q^−1=ϕq^(p^r^)

上1式为长度不变;上2式中即包含了夹角不变和手性不变,因为:

ϕq^(p^)ϕq^(r^)=−ϕq^(p^)⋅ϕq^(r^)+ϕq^(p^)×ϕq^(r^)ϕq^(p^r^)=ϕq^(−p^⋅r^+p^×r^)=−p^⋅r^+ϕq^(p^×r^)

点乘处的结果为实数,叉乘出的结果为纯四元数,它们对应相等,故:

ϕq^(p^)ϕq^(r^)=ϕq^(p^r^)  ⇒ {ϕq^(p^)⋅ϕq^(r^)=p^⋅r^ϕq^(p^)×ϕq^(r^)=ϕq^(p^×r^)

上面诸多性质表明,函数 ϕq^(p^)=q^p^q^−1 表示对纯四元数的一个旋转。

2.4 已知旋转确定四元数

显然,对 q^ 做一个拉伸,不会改变 ϕq^ ,即 ϕq^=ϕαq^。故方便起见,选择 q^ 为单位四元数。则有:

q^=cos⁡θ+q^vsin⁡θ

其中 q^v 为单位纯四元数。代入 ϕq^ 的表达式(p^ 为纯四元数):

ϕq^(p^)=q^p^q^−1=(cos⁡θ+q^vsin⁡θ)p^(cos⁡θ−q^vsin⁡θ)=[cos⁡θp^+sin⁡θ(−q^v⋅p^+q^v×p^)](cos⁡θ−q^vsin⁡θ)=...=(cos2⁡θ−sin2⁡θ)p^+2cos⁡θsin⁡θ q^v×p^+2sin2⁡θ(p^⋅q^v) q^v(12)=cos⁡2θ p^+sin⁡2θ q^v×p^+(1−cos⁡2θ) (p^⋅q^v) q^v

对比式(12)与式(9),即知 ϕq^ 为绕轴 q^v 旋转 2θ 的函数。

2.5 转化旋转函数为矩阵

(13)q^v×p^=(0−qvkqvjqvk0−qvi−qvjqvi0)(pipjpk)
(14)(p^⋅q^v)q^v=(qvi2qviqvjqviqvkqviqvjqvj2qvjqvkqviqvkqvkqvjqvk2)(pipjpk)

将(13)(14)代入(12)中,并记 q^=(cos⁡θ+sin⁡θq^v)=(x,y,z,w),整理得:

ϕq^(p^)=q^p^q^−1=(1−2y2−2z22xy−2zw2xz+2yw2xy+2zw1−2x2−2z22yz−2xw2xz−2yw2yz+2xw1−2x2−2y2)(pipjpk)(15)=Rq^↠ p^

以上就四元数旋转函数对应的旋转矩阵。