接下来我们认识最后一种表达角位移的方式:
四元数(Quaternion)表达角位移
关于四元数是什么留给读者自行延伸阅读,这里只提出四元数实质上是对复数(a,b,c,d)的一种几何解释。
复数(a,b,c,d)有一个实部a,3个虚部分别为b,c,d。复数可以进行加、减、点乘、叉乘,可以求它的共轭复数,也可以计算复数的模和求逆。
四元数如何表达角位移呢,我们让n为旋转轴方向的单位向量,,那么四元数q=[
]
表达了这个角位移。其中nx ny nz分别是旋转轴在轴线上的投影向量。
我们特别提出四元数的插值(slerp)。四元数的插值过程我们只需要知道有一个开始状态q,结束状态p,插值参数t(0<=t<=1),那么slerp函数可以非常快速平滑地在q与p两个状态中插入一个旋转状态。其数学、几何解释也请读者自行延伸阅读。
优点:slerp提供了2个方位间最为平滑的插值;角位移的连接和求逆更为迅速(相比矩阵);每个角位移占用4个数的内存开销,中等开销;
缺点:最难于使用(光理解它就已经比较科幻了);可能存在一组四元数表达出不合法的角位移。
我们了解了角位移的3种表达方式,具体在开发中使用哪一种来表达需要理解他们各自的优越点,根据实际情况选择。而这3种方式表达的角位移可以进行互相转换,其数学过程较为复杂,我们可以直接调用现有的API来完成。
几何图元
明天继续….