WIKI:单位四元数(Unit quarternion)可以用于表示三维空间里的旋转。它与常用的另外两种表示方式(三维正交矩阵和欧拉角)是等价的,但是避免了欧拉角表示法中的万向锁问题。比起三维正交矩阵表示,四元数表示能够更方便地给出旋转的转轴与旋转角。
关于欧拉角旋转的万向节死锁问题,是旋转的时候一不小心是两个不同的轴重合了,从而导致失去了一个轴的自由度。四元数不会出现这样的问题。
不太懂还是,大致意思是一个单位四元数可以使得三维空间中的一个点实现旋转。具体公式是
其中p是三维空间的一个点转化成的一个纯四元数,至于旋转的角度与旋转轴都由四元数q来决定。
在左手坐标系中代表顺时针旋转,将q与倒数调换即为逆时针旋转。当q为单位四元数时,q的倒数和共轭相同,公式中的倒数可以使用共轭替换。由于共轭只需要改变符号就可以获得,所以这个旋转所需要的计算代价很小。
对于旋转轴与旋转角度:旋转轴由四元数q的虚部代表的向量来决定。
旋转角度根据四元数q的实部
q=((x,y,z)sin?θ/2,cos?θ/2)
贴一个写的不错的博客文章链接:滴滴里面的证明没看懂。。
l 旋转变换
旋转变换是所有变换矩阵中最复杂的,因为它使用了许多的三角函数。要利用旋转方程对点进行旋转,需要提取旋转方程的运算反,然后将它们放到矩阵中。在3D坐标系中,可以绕三个轴进行旋转:x轴、y轴、z轴,现在介绍绕z轴旋转的情况。重要的是,绕任何轴旋转是,该轴对应的分量保持不变。现给定p=[x? y?
z? 1],变换矩阵Mz
Mz=cosθsinθ00-sinθcosθ0000100001
则
??????
p‘=pMz=x? y? z? 1*cosθsinθ00-sinθcosθ0000100001=[x*cosθ-y*sinθ ??x*sinθ+y*cosθ ??z? 1]
对于旋转变换矩阵的逆矩阵,有两种方法可以计算:一种方法基于几何学,另一种方法基于线性代数。首先采用几何学方法计算逆矩阵。将物体绕z轴旋转角度θ后,要将它恢复到原来的位置,只需要将它旋转角度-θ即可。因此要计算旋转矩阵的逆矩阵,只需要将旋转矩阵中的θ替换为-θ。因此,逆矩阵Mz-1如下:
Mz-1=cos-θsin-θ00-sin-θcos-θ0000100001=cosθ-sinθ00sinθcosθ0000100001
下面采用线性代数的方法来计算逆矩阵。正交(Orthonormal)矩阵指的是,在给定的基(basis)的情况下,矩阵的每一行(列)都与前一行(列)垂直。所以旋转矩阵Mz是正交矩阵,而对于正交矩阵,其转置矩阵与逆矩阵相同。故旋转变换矩阵的逆矩阵为:
Mz-1=Mzt=cosθ-sinθ00sinθcosθ0000100001