四元数 旋转矩阵

1,040 阅读1分钟

1. 四元数的概念

  四元数可以看成是复数的扩充,它有三个虚部,形式如下:

q=w+xi+yj+zkorq=s+vq=w+xi+yj+zk\quad or\quad q=s+v

其中

i2=j2=k2=1ij=ji=kjk=jk=iki=ki=ji^2=j^2=k^2=-1\\ ij=-ji=k\\ jk=-jk=i\\ ki=-ki=j\\

四元数常见概念

1)四元数的模

q=w2+x2+y2+z2|q|=\sqrt{w^2+x^2+y^2+z^2}

2)四元数常见运算

p1=[s1,v1]=(w1,x1,y1,z1)Tp2=[s2,v2]=(w2,x2,y2,z2)Tp_1=[s_1,\mathbf{v_1}]=(w_1,x_1,y_1,z_1)^T p_2=[s_2,\mathbf{v_2}]=(w_2,x_2,y_2,z_2)^T

-加法

p1+p2=s1+s2,v1+v2=w1+w2+(x1+x2)i+(y1+y2)j+(z1+z2)kp_1+p_2=s_1+s_2,\mathbf{v_1+v_2}=w_1+w_2 + (x_1+x_2)i+(y_1+y_2)j+(z_1+z_2)k

-乘法

p1p2=s1s2v1v2+s1v2+s2v1+v1×v2=(w1w2x1x2y1y2z1z2w1x2+x1w2+y1z2z1y2w1y2x1z2+y1w2+z1x2w1z2+x2y2y1x2+z1w2)p_1p_2=s_1s_2-\mathbf{v_1v_2}+s_1\mathbf{v_2}+s_2\mathbf{v_1}+\mathbf{v1\times v2}\\ =\begin{pmatrix} w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2 \\ w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2 \\ w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2 \\ w_1z_2 + x_2y_2 - y_1x_2 + z_1w_2\end{pmatrix}

-点积(内积)

p1p2=w1w2+v1v2=w1w2+x1x2+y1y2+z1z2p_1\cdot p_2=w_1w_2+\mathbf{v_1v_2}=w_1w_2+x_1x_2+y_1y_2+z_1z_2

-叉乘(外积)

p1×p2=p1p2p2p22=v1×v2p_1\times p_2=\frac{p_1p_2-p_2p_2}{2}=\mathbf{v1\times v2}

-共轭

p1=s1v1p1p1=w12+x12+y12+z12p_1^*=s_1-\mathbf{v_1}\\ p_1p_1^*=w_1^2+x_1^2+y_1^2+z_1^2

-逆

p11=p1p12p1p11=p11p1=1p_1^{-1}=\frac{p_1^*}{\parallel p_1\parallel^2}\\ p_1p_1^{-1}=p_1^{-1}p_1=1

3)单位四元数

满足下式,

w2+x2+y2+z2=1w^2+x^2+y^2+z^2=1

2. 四元数与刚性旋转

  单位四元数(Unit quaternion)可以用于表示三维空间里的旋转。它与常用的另外两种表示方式(三维正交矩阵和欧拉角)是等价的,但是避免了欧拉角表示法中的万向锁问题。比起三维正交矩阵表示,四元数表示能够更方便地给出旋转的转轴与旋转角。
  三维空间中的旋转可以被认为是一个泛函ϕ\phiR3R3\mathbb{R^3}\to\mathbb{R^3}的映射。如果ϕ\phi要满足一个刚性旋转需要满足如下三点,加上PP是三维空间中的一点可用纯四元数表示

P=[0,v]=xi+yj+zkP=[0,\mathbf{v}]=xi+yj+zk
  1. 旋转后向量长度保持不变
ϕ(P)=P\parallel \phi(P) \parallel=\parallel P \parallel
  1. 旋转后角度不变
ϕ(P1)ϕ(P2)=P1P2\phi(P_1) \cdot \phi(P_2) = P_1 \cdot P_2
  1. handedness保持不变(即左右手坐标系准则不变)
ϕ(P1)×ϕ(P2)=P1×P2\phi(P_1) \times \phi(P_2) = P_1 \times P_2

并且ϕ(s+v)=s+ϕ(v)\phi(s+\mathbf{v})=s+\phi(\mathbf{v}),又因为PPs=0s=0,所以,

ϕ(P1)ϕ(P2)=ϕ(P1P2)\phi(P_1) \cdot \phi(P_2) =\phi(P_1P_2)

ϕq(P)=qPq1\phi_q(P)=qPq^{-1}

时满足上述条件,即可以表示刚性旋转,其中qq是单位四元数。将q=w+xi+yj+zkq=w+xi+yj+zk带入上式即可得到旋转矩阵

Rq=(12y22z22xy2wz2xz+2wy2xy+2wz12x22z22yz2wx2xz2wy2yz+2wx12x22y2)R_q= \begin{pmatrix} 1-2y^2-2z^2 & 2xy-2wz & 2xz+2wy \\ 2xy+2wz & 1-2x^2-2z^2 & 2yz-2wx \\ 2xz-2wy & 2yz+2wx & 1-2x^2-2y^2 \end{pmatrix}