首页 > 其他 > 详细

四元数(Quaternions)简介

时间:2014-04-13 12:31:36      阅读:637      评论:0      收藏:0      [点我收藏+]

经常在代码中看到Quaternions,也知道它是用来表达三维空间的旋转的,但一直没有更深的理解。这两天终于花点时间看了看维基百科的介绍,算是多了解了点。做个记录吧!

质上而言,四元数是一个数学概念,它可以用复数的形式表达为a + b*i + c*j + d*k. 再加上 i*i = j*j = k*k = i*k*j = -1的规则,就可以定义四元数的各种运算。

它最广泛的用途是在计算机图形学中用来表达三维空间的旋转操作,是除了旋转矩阵和欧拉角以外的另外一种表达方式 。

根据欧拉旋转定理,任意三维空间的旋转等同于绕某一轴 (ux, uy, uz) 旋转某一角度 theta. 这一信息可用四元数表达为q = cos(1/2* theta) + (ux*i + uy*j + uz*k) sin(1/2 * theta)
用四元数表达旋转,有很多优异的性质。例如,旋转n倍的theta角就是q的n次方,旋转反向的theta角就是q的共轭,等等。
 
和旋转矩阵相比,四元数表达有五个优势:
1. 它只需要4个参数,而旋转矩阵需要9个(当然,这9个参数并不是互相独立的,所以我们还需要另加5个方程定义矩阵的归一性和正交性)。
2. 给定任意一个轴和旋转角度,人们可以更方便的构造出四元数。用矩阵或是欧拉角都会更麻烦一些。
3. 和矩阵相比,四元数对数值计算的偏差不敏感,数值上的一个小误差只是旋转位姿的一个小变化而已。但对矩阵而言,这可能是致命的。因为这可能导致矩阵的不正交,从而使旋转矩阵失效。
4. 在计算机游戏和动画领域,四元数更易实现相机角度的连续微调,并能避免欧拉角表达带来的死锁问题(Gimbol Lock)。
5. 计算性能稍占优。有人对矩阵和四元数表达进行旋转操作的计算次数进行了比较。结果是,对旋转给定的向量而言,矩阵表达的效率稍占优势。但对于一连串的旋转操作而言,四元数表达更省时间。另外,四元数表达所需要的存储空间更小。
 
四元数表达和矩阵表达可以依照固定的公式进行互相转换。
 
最后,四元数的概念看上去并不等同于“旋量”。后者是更高维空间某数学概念的一个表达。
 

四元数(Quaternions)简介,布布扣,bubuko.com

四元数(Quaternions)简介

原文:http://www.cnblogs.com/kaige/p/quaternions.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!