1 欧拉角与四元数-计算机动画笔记


      以前人们都用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

posted @ 2012-04-11 17:40  Dawnli  阅读(800)  评论(0编辑  收藏  举报