1、四元素的概念
1.1、复数
复数的提出将实数系直接扩大了一个维度,实数成了复数的一个特例。令( extbf{i})为虚数单位,即( extbf{i}^2)=-1;欧拉公式
把一个复数(c=a+bi)的极坐标写为
其中,(r=sqrt{a^2+b^2}, heta=arctan(b/a)).
单位复数的乘法可以达到一个二维旋转的效果。设(c)绕原点旋转(phi)角度后变为(c'),利用复数表示为
于是(e^{iphi})是复数平面上的一个旋转算子。这为二维平面的旋转提供来了一个简洁的方法。相应的,在三维空间中,我们可以使用四元数来对对象进行旋转。
2.1 、四元数的定义
四元数可以认为是复数的推广,1843年哈密顿(Hamilton)发明了四元数,这种数的形式为
其中,(i^2=j^2=k^2=-1,ij=-ji=k,jk=-kj=i,ki=-ik=j),这新包含的4个量并不满足乘法交换律,(i,j,k)为三个正交的单位,四元数可有三种等价的表示方法,分别为
上面的( 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})的单位方向向量。也即为
于是可得到
( extbf{e}_n)类似于复数中的(i),上面表达式表明了四元数的几何意义,任意一个四元数代表一个旋转,它还使得向量模伸长为原来的(r)倍。所以在下面讨论四元数旋转时,均默认为单位四元数。
2、四元数与旋转
在这里都默认原点为不动点。我们需要用单位四元数对三维向量进行旋转,根据对应关系,将三维向量表示为纯虚四元数((0, extbf{p})),注意纯虚四元数和单位四元数不是一个东西。设三维向量对应的四元数为(p=(0, extbf{p})),单位四元数为(q=(cos heta,sin heta; extbf{e}_n)),旋转过程为
算到这里,似乎和我们希望得到的结果不同,因为第一项(-sin heta ; extbf{e}_n cdot extbf{p} ot = 0),而我们希望旋转的结果还是在三维子空间中。仅当特殊情况满足( extbf{e}_n cdot p=0)时,也即旋转轴和旋转向量垂直的情况下,这时候我们得到的旋转结果在三维子空间中,这里先把这个问题放下,后面再讨论。对于单位四元数(q)而言,(q^{-1}=q^{*}),请看下面两种变换
可以看到,上面两个乘法得到的四元数虚部相同,但是得到的都不是纯虚四元数。但是可以知道,左乘一个单位四元数和右乘该单位四元数的逆得到的效果是相同的。考虑
结果得到了我们所要的虚四元数,但是角度都变为2倍了,这就相当于将原三维向量旋转了(2 heta)角度。所以在使用(qpq^{-1})进行旋转时,需要将角度改为( heta/2),复数之所以旋转一次( heta)角度就可以是因为复数旋转本身是一种特殊情况,它的旋转向量与旋转轴垂直(可以假想为(z)轴)。
下面来总结下利用四元数进行旋转的步骤。假设需要旋转的三维空间的点为( extbf{p}),写成四元数的形式
接下来要将该点绕轴( extbf{v})(单位向量)旋转( heta)度。考虑四元数
利用四元数旋转得到一个纯虚四元数
(p')即是变换后的点。整个过程可以理解为,先左乘(q)作( heta/2)角度旋转,再右乘(q^{-1})也作( heta/2)旋转。总的而言,使用四元数进行旋转仅需存储4个浮点数,相比矩阵更加轻量,四元数无论是求逆、串联等操作,相比矩阵更加高效。