以前人们都用Euler Angles来描述几何体的旋转,Euler Angles通常包含XYZ三个旋转分量,也就是我们所熟知的分别绕X、Y、X轴旋转的度数。用Euler Angles表示旋转算是比较节省的了,仅仅利用三个实数就能表示空间中的任意旋转。
下面说说它的缺点:
1. 某些情况下会产生Gimbal Lock,Gimbal Lock是什么可以百度查查;
2. 计算机动画通常需要进行旋转插值,这样的话就需要对Euler Angles三个分量分别做插值,而这三个分量的插值都是相互独立的,最后的插值效果会不够平滑;
英国数学家William Hamilton在1843发明了Quaternion. Quaternion是复数的扩展. 很快Quaternion就被应用来描述三维旋转. 然而, 直到1985年, Quaternion在计算机动画模拟中的威力才被广泛认识. 1985年Ken Shoemake在他的"Animating Rotation with Quaternion Curves"一文中对Quaternion的原理与应用作了详尽的解释.
Quaternion是一个四维的矢量, 如下:
Q = <w, x, y, z>
其复数形式如下:
Q = w + xi + yj + zk
在图形学中, 单位Quaternion常被利用来描述物体在三维空间中的旋转. 它的几何意义是物体绕轴<x, y, z>旋转一个角度. 这个角度表示如下:
cos(θ/2)=w
与Euler Angles相比, Quaternion有很多的优点,前面提到的Euler Angles的两个大缺陷它都克服了。
在动画模拟中, 经常需要对旋转作插值计算. 这时候, Quaternion具有矩阵和Euler Angles所不具有的优势: 对旋转进行光滑的插值计算. 它的结果是高质量的动画. 它是通过对角度进行线性插值(Linear Interpolation)得到的。
需要说明的是,Quaternion和矩阵一样,是纯粹的数学概念,不如Euler Angles那么直观。
ref:
http://hi.baidu.com/sxligang/blog/item/bfc4db4bc80989f282025cc0.html
http://www.cppblog.com/heath/archive/2009/12/13/103127.html
http://hi.baidu.com/dante_sysu/blog/item/2115fc2bce42b7424ec22632.html (Gimbal Lock)
Animating rotation with quaternion curves.pdf