前言
四元数quaternion ,一个熟悉又陌生的东西,我曾经短暂地接触过,但是又倏忽地将它抛弃。如今,我再次拜倒在它的脚下,只因为我现在不得不使用它,希望它能够不计前嫌 ,留我一条生路。
四元数基础
参考自Understanding Quaternions ,用于记录学习四元数的过程。
定义
四元数是最简单的一种超复数,可以看作是复数在三维空间中的推广,其共有四个分量,定义为:
q = a + b i ⃗ + c j ⃗ + d k ⃗ q=a+b\vec{i}+c\vec{j}+d\vec{k}
q = a + b i + c j + d k
其中a a a 称为实部,b , c , d b,c,d b , c , d 称为虚部,i ⃗ , j ⃗ , k ⃗ \vec{i},\vec{j},\vec{k} i , j , k 是四元数的基本单位,满足:
i ⃗ 2 = j ⃗ 2 = k ⃗ 2 = i ⃗ ⋅ j ⃗ ⋅ k ⃗ = − 1 \vec{i}^2=\vec{j}^2=\vec{k}^2=\vec{i}\cdot\vec{j}\cdot\vec{k}=-1\\
i 2 = j 2 = k 2 = i ⋅ j ⋅ k = − 1
即三个基本单位是完备的正交基。特别的,在复数域下具有重要意义的欧拉公式,在四元数空间中也有以下的形式:
e i θ = cos θ 2 + sin θ 2 n ⃗ ⋅ i ⃗ = q 0 + q ⃗ ⋅ i ⃗ e^{i\theta}=\cos\frac{\theta}{2}+\sin\frac{\theta}{2}\vec{n}\cdot\vec{i}=q_0+\vec{q}\cdot\vec{i}
e i θ = cos 2 θ + sin 2 θ n ⋅ i = q 0 + q ⋅ i
四元数可以看作是超球面上的一点,即a 2 + b 2 + c 2 + d 2 = 1 a^2+b^2+c^2+d^2=1 a 2 + b 2 + c 2 + d 2 = 1 ,而纯四元数(类比于纯虚数),是在a = 0 a=0 a = 0 的子空间中的一点。
共轭运算
四元数的共轭运算类似于复数,即将全部的虚部都取反,得到是共轭四元数:
q ∗ = a − b i ⃗ − c j ⃗ − d k ⃗ q^*=a-b\vec{i}-c\vec{j}-d\vec{k}
q ∗ = a − b i − c j − d k
根据共轭运算可以定义四元数的模长,与复数相同:
∣ q ∣ = q ∗ q = a 2 + b 2 + c 2 + d 2 |q|=\sqrt{q^*q}=\sqrt{a^2+b^2+c^2+d^2}
∣ q ∣ = q ∗ q = a 2 + b 2 + c 2 + d 2
特别地,可以定义四元数的逆,称满足下式的另一个目标四元数为当前四元数的逆:
q q − 1 = q − 1 q = 1 q − 1 = q ∗ ∣ q ∣ 2 \begin{aligned}
qq^{-1}&=q^{-1}q=1\\\\
q^{-1}&=\frac{q^*}{|q|^2}
\end{aligned}
q q − 1 q − 1 = q − 1 q = 1 = ∣ q ∣ 2 q ∗
四则运算
四元数的运行遵从与复数相似的法则,满足线性运算,四元数的乘除运算也与复数保持一致,即有:
q 1 q 2 = ( a 1 a 2 − b 1 b 2 − c 1 c 2 − d 1 d 2 ) + ( a 1 b 2 + b 1 a 2 + c 1 d 2 − d 1 c 2 ) i ⃗ + ( a 1 c 2 − b 1 d 2 + c 1 a 2 + d 1 b 2 ) j ⃗ + ( a 1 d 2 + b 1 c 2 − c 1 b 2 + d 1 a 2 ) k ⃗ = ( a 1 b 1 − q ⃗ 1 ⋅ q ⃗ 2 , a 1 q ⃗ 2 + b 1 q ⃗ 1 + q ⃗ 1 × q ⃗ 2 ) \begin{aligned}
q_1q_2&=(a_1a_2-b_1b_2-c_1c_2-d_1d_2)+(a_1b_2+b_1a_2+c_1d_2-d_1c_2)\vec{i}\\
&+(a_1c_2-b_1d_2+c_1a_2+d_1b_2)\vec{j}+(a_1d_2+b_1c_2-c_1b_2+d_1a_2)\vec{k}\\
&=(a_1b_1-\vec{q}_1\cdot\vec{q}_2,a_1\vec{q}_2+b_1\vec{q}_1+\vec{q}_1\times\vec{q}_2)
\end{aligned}
q 1 q 2 = ( a 1 a 2 − b 1 b 2 − c 1 c 2 − d 1 d 2 ) + ( a 1 b 2 + b 1 a 2 + c 1 d 2 − d 1 c 2 ) i + ( a 1 c 2 − b 1 d 2 + c 1 a 2 + d 1 b 2 ) j + ( a 1 d 2 + b 1 c 2 − c 1 b 2 + d 1 a 2 ) k = ( a 1 b 1 − q 1 ⋅ q 2 , a 1 q 2 + b 1 q 1 + q 1 × q 2 )
其中最后一行所写的公式是乘法运算的快捷公式。
四元数的导数
将四元数看作是一个函数,当其虚部实部满足导数的条件时,可以认为它也存在相应的导数。仍然以q = a + b i ⃗ + c j ⃗ + d k ⃗ q=a+b\vec{i}+c\vec{j}+d\vec{k} q = a + b i + c j + d k 为例,不妨设q q q 是一个单位四元数,则就有:
a 2 + b 2 + c 2 + d 2 = 1 a^2+b^2+c^2+d^2=1
a 2 + b 2 + c 2 + d 2 = 1
对其求导,得到:
a a ˙ + b b ˙ + c c ˙ + d d ˙ = 0 a\dot{a}+b\dot{b}+c\dot{c}+d\dot{d}=0
a a ˙ + b b ˙ + c c ˙ + d d ˙ = 0
单位四元数多用于计算旋转,因此本式实际指出了一种最基本的动力学方程形式。
四元数与旋转
四元数现在基本上只用于计算坐标系旋转变换,与其对应 的另一个著名表达式是欧拉轴角公式。以书中作者给出的例子为参考,记偏航角为ψ \psi ψ ,俯仰角为θ \theta θ ,滚转角为γ \gamma γ ,分别对应绕Z 0 Z_0 Z 0 轴,Y ′ Y' Y ′ 轴和X 1 X_1 X 1 轴旋转,如下图所示:
三轴欧拉角
绕三个轴的欧拉角旋转矩阵可以写为:
R = R Z ( ψ ) R Y ( θ ) R X ( γ ) R=R_Z(\psi)R_Y(\theta)R_X(\gamma)
R = R Z ( ψ ) R Y ( θ ) R X ( γ )
如以逆时针转角为正,则可以求得其中绕Z 0 Z_0 Z 0 轴旋转的矩阵为:
R Z ( ψ ) = [ cos ψ sin ψ 0 − sin ψ cos ψ 0 0 0 1 ] R_Z(\psi)=\begin{bmatrix}
\cos\psi&\sin\psi&0\\
-\sin\psi&\cos\psi&0\\
0&0&1
\end{bmatrix}
R Z ( ψ ) = cos ψ − sin ψ 0 sin ψ cos ψ 0 0 0 1
绕Y ′ Y' Y ′ 轴旋转的矩阵为:
R Y ( θ ) = [ cos θ 0 − sin θ 0 1 0 sin θ 0 cos θ ] R_Y(\theta)=\begin{bmatrix}
\cos\theta&0&-\sin\theta\\
0&1&0\\
\sin\theta&0&\cos\theta
\end{bmatrix}
R Y ( θ ) = cos θ 0 sin θ 0 1 0 − sin θ 0 cos θ
绕X 1 X_1 X 1 轴旋转的矩阵为:
R X ( γ ) = [ 1 0 0 0 cos γ sin γ 0 − sin γ cos γ ] R_X(\gamma)=\begin{bmatrix}
1&0&0\\
0&\cos\gamma&\sin\gamma\\
0&-\sin\gamma&\cos\gamma
\end{bmatrix}
R X ( γ ) = 1 0 0 0 cos γ − sin γ 0 sin γ cos γ
四元数表示旋转
使用四元数表示旋转,首先需要将空间中的三维向量使用四元数表示出来,这里需要考虑四维超球的投影。空间中任意一个三维向量 都可以表示为四维超球与a = 0 a=0 a = 0 交平面上的一点,即:
p = 0 + p x i ⃗ + p y j ⃗ + p z k ⃗ p=0+p_x\vec{i}+p_y\vec{j}+p_z\vec{k}
p = 0 + p x i + p y j + p z k
设某三维向量p 0 p_0 p 0 在三维空间中发生一次旋转q q q ,到达p 1 p_1 p 1 的位置,旋转过程可以使用四元数q = q 0 + q 1 i ⃗ + q 2 j ⃗ + q 3 k ⃗ q=q_0+q_1\vec{i}+q_2\vec{j}+q_3\vec{k} q = q 0 + q 1 i + q 2 j + q 3 k 表示,则有:
p 0 = q ⋅ p 1 ⋅ q ∗ p_0=q\cdot p_1\cdot q^*
p 0 = q ⋅ p 1 ⋅ q ∗
计算该式,得到:
p 1 = ( q 0 + q 1 i ⃗ + q 2 j ⃗ + q 3 k ⃗ ) ⋅ ( 0 + p x 1 i ⃗ + p y 1 j ⃗ + p z 1 k ⃗ ) ⋅ ( q 0 − q 1 i ⃗ − q 2 j ⃗ − q 3 k ⃗ ) = [ p x 1 ( q 0 2 + q 1 2 − q 2 2 − q 3 2 ) + 2 p y 1 ( q 1 q 2 − q 0 q 3 ) + 2 p z 1 ( q 1 q 3 + q 0 q 2 ) ] i ⃗ + [ 2 p x 1 ( q 2 q 1 + q 0 q 3 ) + p y 1 ( q 0 2 − q 1 2 + q 2 2 − q 3 2 ) + 2 p z 1 ( q 2 q 3 − q 0 q 1 ) ] j ⃗ + [ 2 p x 1 ( q 3 q 1 − q 0 q 2 ) + 2 p y 1 ( q 3 q 2 + q 0 q 1 ) + p z 1 ( q 0 2 − q 1 2 − q 2 2 + q 3 2 ) ] k ⃗ ⟹ { p x 0 = p x 1 ( q 0 2 + q 1 2 − q 2 2 − q 3 2 ) + 2 p y 1 ( q 1 q 2 − q 0 q 3 ) + 2 p z 1 ( q 1 q 3 + q 0 q 2 ) p y 0 = 2 p x 1 ( q 2 q 1 + q 0 q 3 ) + p y 1 ( q 0 2 − q 1 2 + q 2 2 − q 3 2 ) + 2 p z 1 ( q 2 q 3 − q 0 q 1 ) p z 0 = 2 p x 1 ( q 3 q 1 − q 0 q 2 ) + 2 p y 1 ( q 3 q 2 + q 0 q 1 ) + p z 1 ( q 0 2 − q 1 2 − q 2 2 + q 3 2 ) \begin{aligned}
p_1&=(q_0+q_1\vec{i}+q_2\vec{j}+q_3\vec{k})\cdot(0+p_{x1}\vec{i}+p_{y1}\vec{j}+p_{z1}\vec{k})\cdot(q_0-q_1\vec{i}-q_2\vec{j}-q_3\vec{k})\\
&=[p_{x1}(q_0^2+q_1^2-q_2^2-q_3^2)+2p_{y1}(q_1q_2-q_0q_3)+2p_{z1}(q_1q_3+q_0q_2)]\vec{i}\\
&+[2p_{x1}(q_2q_1+q_0q_3)+p_{y1}(q_0^2-q_1^2+q_2^2-q_3^2)+2p_{z1}(q_2q_3-q_0q_1)]\vec{j}\\
&+[2p_{x1}(q_3q_1-q_0q_2)+2p_{y1}(q_3q_2+q_0q_1)+p_{z1}(q_0^2-q_1^2-q_2^2+q_3^2)]\vec{k}\\
\implies&\left\{
\begin{aligned}
p_{x0}&=p_{x1}(q_0^2+q_1^2-q_2^2-q_3^2)+2p_{y1}(q_1q_2-q_0q_3)+2p_{z1}(q_1q_3+q_0q_2)\\
p_{y0}&=2p_{x1}(q_2q_1+q_0q_3)+p_{y1}(q_0^2-q_1^2+q_2^2-q_3^2)+2p_{z1}(q_2q_3-q_0q_1)\\
p_{z0}&=2p_{x1}(q_3q_1-q_0q_2)+2p_{y1}(q_3q_2+q_0q_1)+p_{z1}(q_0^2-q_1^2-q_2^2+q_3^2)
\end{aligned}
\right.
\end{aligned}
p 1 ⟹ = ( q 0 + q 1 i + q 2 j + q 3 k ) ⋅ ( 0 + p x 1 i + p y 1 j + p z 1 k ) ⋅ ( q 0 − q 1 i − q 2 j − q 3 k ) = [ p x 1 ( q 0 2 + q 1 2 − q 2 2 − q 3 2 ) + 2 p y 1 ( q 1 q 2 − q 0 q 3 ) + 2 p z 1 ( q 1 q 3 + q 0 q 2 )] i + [ 2 p x 1 ( q 2 q 1 + q 0 q 3 ) + p y 1 ( q 0 2 − q 1 2 + q 2 2 − q 3 2 ) + 2 p z 1 ( q 2 q 3 − q 0 q 1 )] j + [ 2 p x 1 ( q 3 q 1 − q 0 q 2 ) + 2 p y 1 ( q 3 q 2 + q 0 q 1 ) + p z 1 ( q 0 2 − q 1 2 − q 2 2 + q 3 2 )] k ⎩ ⎨ ⎧ p x 0 p y 0 p z 0 = p x 1 ( q 0 2 + q 1 2 − q 2 2 − q 3 2 ) + 2 p y 1 ( q 1 q 2 − q 0 q 3 ) + 2 p z 1 ( q 1 q 3 + q 0 q 2 ) = 2 p x 1 ( q 2 q 1 + q 0 q 3 ) + p y 1 ( q 0 2 − q 1 2 + q 2 2 − q 3 2 ) + 2 p z 1 ( q 2 q 3 − q 0 q 1 ) = 2 p x 1 ( q 3 q 1 − q 0 q 2 ) + 2 p y 1 ( q 3 q 2 + q 0 q 1 ) + p z 1 ( q 0 2 − q 1 2 − q 2 2 + q 3 2 )
特别地,对于单位四元数,(即逆等于其共轭的四元数),有:
p 1 = q ∗ ⋅ p 0 ⋅ q = q − 1 ⋅ p 0 ⋅ q \begin{aligned}
p_1&=q^*\cdot p_0\cdot q\\
&=q^{-1}\cdot p_0\cdot q
\end{aligned}
p 1 = q ∗ ⋅ p 0 ⋅ q = q − 1 ⋅ p 0 ⋅ q
欧拉角与四元数的关系
根据上节公式,现对三轴欧拉角逐个讨论其四元数等价式。首先对于绕Z 0 Z_0 Z 0 轴旋转的情况,其旋转矩阵将向量p ⃗ 0 = p x 0 i ⃗ + p y 0 j ⃗ + p z 0 k ⃗ \vec{p}_0=p_{x0}\vec{i}+p_{y0}\vec{j}+p_{z0}\vec{k} p 0 = p x 0 i + p y 0 j + p z 0 k 旋转至p ⃗ 1 = p x 1 i ⃗ + p y 1 j ⃗ + p z 1 k ⃗ \vec{p}_1=p_{x1}\vec{i}+p_{y1}\vec{j}+p_{z1}\vec{k} p 1 = p x 1 i + p y 1 j + p z 1 k ,则其反过程是:
[ p x 0 p y 0 p z 0 ] = [ cos ψ − sin ψ 0 sin ψ cos ψ 0 0 0 1 ] [ p x 1 p y 1 p z 1 ] ⟹ { p x 0 = p x 1 cos ψ − p y 1 sin ψ p y 0 = p x 1 sin ψ + p y 1 cos ψ p z 0 = p z 1 \begin{bmatrix}
p_{x0}\\
p_{y0}\\
p_{z0}
\end{bmatrix}=\begin{bmatrix}
\cos\psi&-\sin\psi&0\\
\sin\psi&\cos\psi&0\\
0&0&1
\end{bmatrix}\begin{bmatrix}
p_{x1}\\
p_{y1}\\
p_{z1}
\end{bmatrix}\implies\left\{
\begin{aligned}
p_{x0}&=p_{x1}\cos\psi-p_{y1}\sin\psi\\
p_{y0}&=p_{x1}\sin\psi+p_{y1}\cos\psi\\
p_{z0}&=p_{z1}
\end{aligned}
\right.
p x 0 p y 0 p z 0 = cos ψ sin ψ 0 − sin ψ cos ψ 0 0 0 1 p x 1 p y 1 p z 1 ⟹ ⎩ ⎨ ⎧ p x 0 p y 0 p z 0 = p x 1 cos ψ − p y 1 sin ψ = p x 1 sin ψ + p y 1 cos ψ = p z 1
将上式与四元数等价式进行比较,可以得到以下九项式子:
{ q 0 2 + q 1 2 − q 2 2 − q 3 2 = cos ψ q 1 q 2 − q 0 q 3 = − 1 2 sin ψ q 1 q 3 + q 0 q 2 = 0 q 2 q 1 + q 0 q 3 = 1 2 sin ψ q 0 2 − q 1 2 + q 2 2 − q 3 2 = cos ψ q 2 q 3 − q 0 q 1 = 0 q 3 q 1 − q 0 q 2 = 0 q 3 q 2 + q 0 q 1 = 0 q 0 2 − q 1 2 − q 2 2 + q 3 2 = 1 \left\{
\begin{aligned}
q_0^2+q_1^2-q_2^2-q_3^2&=\cos\psi\\
q_1q_2-q_0q_3&=-\frac{1}{2}\sin\psi\\
q_1q_3+q_0q_2&=0\\
q_2q_1+q_0q_3&=\frac{1}{2}\sin\psi\\
q_0^2-q_1^2+q_2^2-q_3^2&=\cos\psi\\
q_2q_3-q_0q_1&=0\\
q_3q_1-q_0q_2&=0\\
q_3q_2+q_0q_1&=0\\
q_0^2-q_1^2-q_2^2+q_3^2&=1\\
\end{aligned}
\right.
⎩ ⎨ ⎧ q 0 2 + q 1 2 − q 2 2 − q 3 2 q 1 q 2 − q 0 q 3 q 1 q 3 + q 0 q 2 q 2 q 1 + q 0 q 3 q 0 2 − q 1 2 + q 2 2 − q 3 2 q 2 q 3 − q 0 q 1 q 3 q 1 − q 0 q 2 q 3 q 2 + q 0 q 1 q 0 2 − q 1 2 − q 2 2 + q 3 2 = cos ψ = − 2 1 sin ψ = 0 = 2 1 sin ψ = cos ψ = 0 = 0 = 0 = 1
本式实际上也给出了已知四元数,求解旋转矩阵的方法。直接求解这个方程,显然可知q 1 = q 2 = 0 q_1=q_2=0 q 1 = q 2 = 0 ,然后进一步代回原式,得到:
{ q 0 = cos ψ 2 q 1 = 0 q 2 = 0 q 3 = sin ψ 2 \left\{
\begin{aligned}
q_0&=\cos\frac{\psi}{2}\\
q_1&=0\\
q_2&=0\\
q_3&=\sin\frac{\psi}{2}
\end{aligned}
\right.
⎩ ⎨ ⎧ q 0 q 1 q 2 q 3 = cos 2 ψ = 0 = 0 = sin 2 ψ
因此,绕Z 0 Z_0 Z 0 轴旋转的四元数为:
q Z = cos ψ 2 + sin ψ 2 k ⃗ q_Z=\cos\frac{\psi}{2}+\sin\frac{\psi}{2}\vec{k}
q Z = cos 2 ψ + sin 2 ψ k
同理,可以得到绕Y ′ Y' Y ′ 轴旋转的四元数为:
q Y = cos θ 2 + sin θ 2 j ⃗ q_Y=\cos\frac{\theta}{2}+\sin\frac{\theta}{2}\vec{j}
q Y = cos 2 θ + sin 2 θ j
绕X 1 X_1 X 1 轴旋转的四元数为:
q X = cos γ 2 + sin γ 2 i ⃗ q_X=\cos\frac{\gamma}{2}+\sin\frac{\gamma}{2}\vec{i}
q X = cos 2 γ + sin 2 γ i
旋转矩阵与四元数的关系
欧拉角与四元数有着显著和优美的联系,而实际中的旋转矩阵就没有如此好看的表达式,一般人估计硬记也记不住,求解其的方法仍然需要从四元数的等价式出发,只不过这里不再是欧拉轴角旋转矩阵,而是一般意义上的旋转矩阵。仍然有:
{ p x 0 = r 11 p x 1 + r 12 p y 1 + r 13 p z 1 p y 0 = r 21 p x 1 + r 22 p y 1 + r 23 p z 1 p z 0 = r 31 p x 1 + r 32 p y 1 + r 33 p z 1 \left\{
\begin{aligned}
p_{x0}&=r_{11}p_{x1}+r_{12}p_{y1}+r_{13}p_{z1}\\
p_{y0}&=r_{21}p_{x1}+r_{22}p_{y1}+r_{23}p_{z1}\\
p_{z0}&=r_{31}p_{x1}+r_{32}p_{y1}+r_{33}p_{z1}
\end{aligned}
\right.
⎩ ⎨ ⎧ p x 0 p y 0 p z 0 = r 11 p x 1 + r 12 p y 1 + r 13 p z 1 = r 21 p x 1 + r 22 p y 1 + r 23 p z 1 = r 31 p x 1 + r 32 p y 1 + r 33 p z 1
对比四元数等价式,可以得到:
{ q 0 2 + q 1 2 − q 2 2 − q 3 2 = r 11 q 1 q 2 − q 0 q 3 = 1 2 r 12 q 1 q 3 + q 0 q 2 = 1 2 r 13 q 2 q 1 + q 0 q 3 = 1 2 r 21 q 0 2 − q 1 2 + q 2 2 − q 3 2 = r 22 q 2 q 3 − q 0 q 1 = 1 2 r 23 q 3 q 1 − q 0 q 2 = 1 2 r 31 q 3 q 2 + q 0 q 1 = 1 2 r 32 q 0 2 − q 1 2 − q 2 2 + q 3 2 = r 33 \left\{
\begin{aligned}
q_0^2+q_1^2-q_2^2-q_3^2&=r_{11}\\
q_1q_2-q_0q_3&=\frac{1}{2}r_{12}\\
q_1q_3+q_0q_2&=\frac{1}{2}r_{13}\\
q_2q_1+q_0q_3&=\frac{1}{2}r_{21}\\
q_0^2-q_1^2+q_2^2-q_3^2&=r_{22}\\
q_2q_3-q_0q_1&=\frac{1}{2}r_{23}\\
q_3q_1-q_0q_2&=\frac{1}{2}r_{31}\\
q_3q_2+q_0q_1&=\frac{1}{2}r_{32}\\
q_0^2-q_1^2-q_2^2+q_3^2&=r_{33}
\end{aligned}
\right.
⎩ ⎨ ⎧ q 0 2 + q 1 2 − q 2 2 − q 3 2 q 1 q 2 − q 0 q 3 q 1 q 3 + q 0 q 2 q 2 q 1 + q 0 q 3 q 0 2 − q 1 2 + q 2 2 − q 3 2 q 2 q 3 − q 0 q 1 q 3 q 1 − q 0 q 2 q 3 q 2 + q 0 q 1 q 0 2 − q 1 2 − q 2 2 + q 3 2 = r 11 = 2 1 r 12 = 2 1 r 13 = 2 1 r 21 = r 22 = 2 1 r 23 = 2 1 r 31 = 2 1 r 32 = r 33
本方程更加复杂,不过也是能求解的,首先加入先验的单位四元数条件,即q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 q_0^2+q_1^2+q_2^2+q_3^2=1 q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 ,然后将第一式、第四式和第九式相加,得到:
4 q 0 2 − 1 = r 11 + r 22 + r 33 4q_0^2-1=r_{11}+r_{22}+r_{33}
4 q 0 2 − 1 = r 11 + r 22 + r 33
由此可以解出q 0 q_0 q 0 ,但是需要注意q_0应该取正号还是负号,实际上,只要保证q 1 , q 2 , q 3 q_1,q_2,q_3 q 1 , q 2 , q 3 均与q 0 q_0 q 0 耦合,就不用担心符号问题了,单位四元数本身符号不影响旋转结果。因此解得:
{ q 0 = 1 2 r 11 + r 22 + r 33 + 1 q 1 = r 32 − r 23 4 q 0 q 2 = r 13 − r 31 4 q 0 q 3 = r 21 − r 12 4 q 0 \left\{
\begin{aligned}
q_0&=\frac{1}{2}\sqrt{r_{11}+r_{22}+r_{33}+1}\\
q_1&=\frac{r_{32}-r_{23}}{4q_0}\\
q_2&=\frac{r_{13}-r_{31}}{4q_0}\\
q_3&=\frac{r_{21}-r_{12}}{4q_0}
\end{aligned}
\right.
⎩ ⎨ ⎧ q 0 q 1 q 2 q 3 = 2 1 r 11 + r 22 + r 33 + 1 = 4 q 0 r 32 − r 23 = 4 q 0 r 13 − r 31 = 4 q 0 r 21 − r 12
上式也给出了已知四元数求解旋转矩阵的方法。
四元数表示旋转
所谓表示旋转,就是将欧拉角的三轴旋转过程用四元数表达即可。仍然按照Z 0 − Y ′ − X 1 Z_0-Y'-X_1 Z 0 − Y ′ − X 1 的顺序,旋转矩阵如上式可写为:
R = R Z ( ψ ) R Y ( θ ) R X ( γ ) R=R_Z(\psi)R_Y(\theta)R_X(\gamma)
R = R Z ( ψ ) R Y ( θ ) R X ( γ )
而复合旋转的四元数将与上式有相同的结构,如下所示:
q = q Z q Y q X = ( cos ψ 2 + sin ψ 2 k ⃗ ) ( cos θ 2 + sin θ 2 j ⃗ ) ( cos γ 2 + sin γ 2 i ⃗ ) q=q_Zq_Yq_X=\left(\cos\frac{\psi}{2}+\sin\frac{\psi}{2}\vec{k}\right)\left(\cos\frac{\theta}{2}+\sin\frac{\theta}{2}\vec{j}\right)\left(\cos\frac{\gamma}{2}+\sin\frac{\gamma}{2}\vec{i}\right)
q = q Z q Y q X = ( cos 2 ψ + sin 2 ψ k ) ( cos 2 θ + sin 2 θ j ) ( cos 2 γ + sin 2 γ i )
可将复合后的四元数直接视为一个四元数,即可完成旋转后向量的表示计算。
参考文献
Understanding Quaternions
Du Peng, Hu Haibao, Ding Dong, and Li Zhuoyue. Understanding Quaternions. 1st ed. New York, USA: Nova Science Publishers, Inc., 2020. https://lccn.loc.gov/2020037162 .