四元数与旋转变换

1、四元素的概念

1.1、复数

复数的提出将实数系直接扩大了一个维度,实数成了复数的一个特例。令( extbf{i})为虚数单位,即( extbf{i}^2)=-1;欧拉公式

[e^{i heta}=cos heta + i; sin heta ]

把一个复数(c=a+bi)的极坐标写为

[c=re^{i heta} ]

其中,(r=sqrt{a^2+b^2}, heta=arctan(b/a)).

单位复数的乘法可以达到一个二维旋转的效果。设(c)绕原点旋转(phi)角度后变为(c'),利用复数表示为

[c'=re^{i( heta+phi)}=re^{i heta}e^{iphi} ]

于是(e^{iphi})是复数平面上的一个旋转算子。这为二维平面的旋转提供来了一个简洁的方法。相应的,在三维空间中,我们可以使用四元数来对对象进行旋转。

2.1 、四元数的定义

四元数可以认为是复数的推广,1843年哈密顿(Hamilton)发明了四元数,这种数的形式为

[Q=q_0+q_1i+q_2j+q_3k ]

其中,(i^2=j^2=k^2=-1,ij=-ji=k,jk=-kj=i,ki=-ik=j),这新包含的4个量并不满足乘法交换律,(i,j,k)为三个正交的单位,四元数可有三种等价的表示方法,分别为

[Q=q_0+q_1i+q_2j+q_3k \ Q=(q_0, extbf{q})quad quad quad quad quad quad \ Q = (q_0,q_1,q_2,q_3) quad quad quad \ ]

上面的( extbf{q}=(q_1,q_2,q_3))是三维空间的向量。下面解释下几个与四元数相关的概念

  • 四元数的模

    ​ 定义(|Q|=sqrt{q_0^2+q_1^2+q_2^2+q_3^2})为四元数的模。

  • 共轭四元数

    ​ 定义(Q)的共轭四元数为(Q^*=q_0-q_1i-q_2j-q_3k=(q_0,- extbf{q})).

  • 加法运算

    ​ 设四元数(a=(q_0, extbf{q}),b=(p_0, extbf{p})),定义四元数的加法为

    [a+b=(q_0+p_0, extbf{q}+ extbf{p}) ]

  • 乘法运算

    ​ 设四元数(a=(q_0, extbf{q}),b=(p_0, extbf{p})),定义四元数的乘法按照多项式乘法进行,即为直乘,用(circ)表示四元数乘法,这里直接化简了

    [acirc b=p_0q_0- extbf{q}cdot extbf{p}+p_0 extbf{q}+q_0 extbf{p}+ extbf{q} imes extbf{p} \ =(p_0q_0- extbf{q}cdot extbf{p},p_0 extbf{q}+q_0 extbf{p}+ extbf{q} imes extbf{p}) ]

  • 四元数的单位元(1),也可以表示为((1,0)),容易得到

    [Q^{*}circ Q=-(-Q)circ Q=Qcirc Q=|Q|^2 ]

  • 四元数的逆定义为(Q circ Q^{-1}=1),容易得到

    [Q^{-1}=frac{1}{|Q|^2}Q^*=frac{1}{|Q|^2}(q_0,- extbf{q}) ]

  • 纯虚四元数

    ​ 复数中有纯虚数,四元数中同样有纯虚四元数,纯虚四元数的实部为0,形式为((0, extbf{q})).四元数是一个四维空间,纯虚四位数是一个四维数空间的一个三维子空间,就相当于四维空间在某一个方向对三维超平面的一个投影。这就好比在三维坐标系中,令(z=0)则得到一个平面,这个平面就是三维空间的一个二维子空间。

现在我们应该知道,四元数其实是复数扩充的结果,复数的虚部只有一个,而四元数的虚部有三个,且两两相互正交。四元数失去了复数运算交换律的特性参考博士论文,保留了复数绝大部份代数特性。为了表示方便,下面将四元数的乘法符号(circ)省写。

1.2、四元数的指数表示

对四元数(Q=q_0+q_1i+q_2j+q_3k)做以下变形,记( extbf{q}=(q_1,q_2,q_3)),( ho = | extbf{q}|, extbf{q}= ho extbf{e}_n),其中( extbf{e}_n)( extbf{q})的单位方向向量。也即为

[r=|Q|=sqrt{q_0^2+ ho^2} \ cos heta = frac{q_0}{r} quad sin heta = frac{ ho}{r} \ ]

于是可得到

[Q=r(cos heta + extbf{e}_nsin heta)=re^{ extbf{e}_n heta} ]

( extbf{e}_n)类似于复数中的(i),上面表达式表明了四元数的几何意义,任意一个四元数代表一个旋转,它还使得向量模伸长为原来的(r)倍。所以在下面讨论四元数旋转时,均默认为单位四元数。

2、四元数与旋转

在这里都默认原点为不动点。我们需要用单位四元数对三维向量进行旋转,根据对应关系,将三维向量表示为纯虚四元数((0, extbf{p})),注意纯虚四元数和单位四元数不是一个东西。设三维向量对应的四元数为(p=(0, extbf{p})),单位四元数为(q=(cos heta,sin heta; extbf{e}_n)),旋转过程为

[p'=qp=(cos heta ,sin heta ; extbf{e}_n)(0, extbf{p})=(-sin heta ; extbf{e}_n cdot extbf{p},cos heta ; extbf{p}+sin heta ; extbf{e}_n imes p) ]

算到这里,似乎和我们希望得到的结果不同,因为第一项(-sin heta ; extbf{e}_n cdot extbf{p} ot = 0),而我们希望旋转的结果还是在三维子空间中。仅当特殊情况满足( extbf{e}_n cdot p=0)时,也即旋转轴和旋转向量垂直的情况下,这时候我们得到的旋转结果在三维子空间中,这里先把这个问题放下,后面再讨论。对于单位四元数(q)而言,(q^{-1}=q^{*}),请看下面两种变换

[qp=(cos heta,sin heta ; extbf{e}_n)(0, extbf{p}) =(-sin heta ; extbf{e}_n cdot extbf{p},cos heta ; extbf{p}+sin heta ; extbf{e}_n imes p) quad quad\ pq^{-1}=(0, extbf{p})(cos heta,-sin heta ; extbf{e}_n)=(-sin heta ; extbf{e}_n cdot extbf{p},cos heta ; extbf{p}+sin heta ; extbf{e}_n imes p) ]

可以看到,上面两个乘法得到的四元数虚部相同,但是得到的都不是纯虚四元数。但是可以知道,左乘一个单位四元数和右乘该单位四元数的逆得到的效果是相同的。考虑

[qpq^{-1}=(cos heta,sin heta ; extbf{e}_n)(0, extbf{p}) (cos heta , -sin heta ; extbf{e}_n)\ =(-sin heta ; extbf{e}_n cdot extbf{p},cos heta ; extbf{p}+sin heta ; extbf{e}_n imes p) (cos heta , -sin heta ; extbf{e}_n) \ =(0,frac{(1-cos 2 heta)}{2}( extbf{e}_ncdot extbf{p})cdot extbf{e}_n+frac{(1+cos2 heta)}{2}; extbf{p}+sin2 heta; extbf{e}_n imes extbf{p}) ]

结果得到了我们所要的虚四元数,但是角度都变为2倍了,这就相当于将原三维向量旋转了(2 heta)角度。所以在使用(qpq^{-1})进行旋转时,需要将角度改为( heta/2),复数之所以旋转一次( heta)角度就可以是因为复数旋转本身是一种特殊情况,它的旋转向量与旋转轴垂直(可以假想为(z)轴)。

下面来总结下利用四元数进行旋转的步骤。假设需要旋转的三维空间的点为( extbf{p}),写成四元数的形式

[p=(0, extbf{p}) ]

接下来要将该点绕轴( extbf{v})(单位向量)旋转( heta)度。考虑四元数

[q=(cos( heta/2),sin( heta/2) extbf{v}) quad quad \ q^{-1}=(cos( heta/2),-sin( heta/2) extbf{v}) \ ]

利用四元数旋转得到一个纯虚四元数

[p'=qpq^{-1}=(cos^2frac{ heta}{2}; extbf{p}+sin^2frac{ heta}{2}( extbf{p}cdot extbf{v})cdot extbf{v}+sin heta ; extbf{v} imes extbf{p} ]

(p')即是变换后的点。整个过程可以理解为,先左乘(q)( heta/2)角度旋转,再右乘(q^{-1})也作( heta/2)旋转。总的而言,使用四元数进行旋转仅需存储4个浮点数,相比矩阵更加轻量,四元数无论是求逆、串联等操作,相比矩阵更加高效。

参考博客

参考论文

参考PPT

原文地址:https://www.cnblogs.com/tandier/p/8047450.html