四元数(Quaterion)的描述
1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域。四元数在3D图形学中主要用于旋转,骨骼动画等。简单地来说,四元数描述了一次旋转:绕任意一个轴旋转一个角度。
四元数的定义形式:(w, x, y, z)。假如,绕轴向量v(_x,_y,_z)正向(右手旋转法则)旋转角度p,则对应得四元数q为:
q = (cos(p/2), sin(p/2) * _x, sin(p/2) * _y, sin(p/2) * _z)
用四元数来表示旋转,不如用欧拉角(偏航/yaw,俯仰/pitch,横滚/ roll)来表示直接,但是用欧拉角来处理旋转有个不可回避的问题:万向节死锁。我们可以通过将欧拉角转换到四元数来避免这个问题,一次将3个欧拉角变换到独立的3个四元数,然后将这3个四元数相乘就可以得到最终的旋转四元数。
Qx = (cos(yaw/2), sin(yaw/2), 0, 0)
Qy = (cos(pitch/2), 0, sin(pitch/2), 0)
Qz = (cos(roll/2), 0, 0, sin(roll/2)
Q = Qx * Qy * Qz
在PV中提供了从欧拉角到四元数,从四元数到矩阵的变换函数。
从旋转正交矩阵构造一个四元数
Quaternion.createFromOrthoMatrix(m:Matrix3D)
从旋转矩阵构造一个四元数
Quaternion.createFromMatrix(matrix:Matrix3D)
从一个轴与旋转角构造一个四元数
Quaternion.createFromAxisAngle(x:Number, y:Number, z:Number, angle:Number)
从欧拉角构造一个四元数
Quaternion.createFromEuler(ax:Number, ay:Number, az:Number, useDegrees:Boolean = false)
最新评论及回复