四元数的优点和缺点

四元数有一些其他角位移表示方法所没有的优点:
1.平滑插值:slerp和squad提供了方位间的平滑插值,没有其他方法能提供平滑插值。
2.快速连接和角位移求逆:四元数叉乘能将角位移序列转换为单个角位移,用矩阵做同样的操作明显会慢一些。四元数共轭提供了一种有效计算反角位移的方法,通过转置矩阵也能达到同样的目的,但不如四元数来得容易。
3.能和矩阵形式快速转换:四元数和矩阵的转换比欧拉角与矩阵之间的转换稍微快一些。
4.仅用四个数:四元数仅包含四个数,而矩阵用了9个数,它比矩阵“经济”得多(当然仍然比欧拉角多33%)。

要获得这些优点是要付出代价的,四元数也有和矩阵相识的问题,只不过问题程度较轻:
1.比欧拉角稍微大一些:这个额外的数是乎没有太大的关系,但在需要保存大量角位移时,如存储动画数据,这额外的33%也是数量客观的。
2.四元数肯能不合法:坏的输入数据或浮点数舍入误差累积都可能使四元数不合法(能通过四元数表转化解决这个问题,确保四元数为单位大小)。
3.难于使用。在所有三种方式中。四元数是最难于直接使用的。

不同的方位表示方法适用于不同的情况:
1.欧拉角最容易使用。当需要为世界中的物体制定方位时,欧拉角能大大简化人机交互,包括直接的键盘输入方位,在代码中指定方位(如为渲染设定摄像机)、在调试中测试。这个优点不应被忽视,不要以“优化”为名义而牺牲易用性,除非您确定这种优化的确有效果。
2.如果需要在坐标系之间转换位置,那么就选择矩阵形式。当然这并不意味着您就不能用其它格式来保存方位,并在需要的时候转换到矩阵格式。另一种方法是用欧拉角作为方位“主拷贝”但同时维护一个旋转矩阵,当欧拉角发生改变时矩阵也要同时进行更新。
3.当需要大量保存方位数据(如动画)时,就使用欧拉角或四元数。欧拉角蒋少占25%的内存,但它在转换到矩阵时要稍微慢一些。如果动画数据需要嵌套坐标系之间的连接,四元数可能使最好的选择。
4.平滑的插值只能用四元数完成。如果您用其它格式,也可以先转换到四元数然后再插值,插值完毕后再转换回原来的形式。
posted @ 2009-09-28 23:03 耀阳 阅读(...) 评论(...) 编辑 收藏