四元数不仅能和矩阵之间进行相互转换,还能和欧拉角之间进行相互转换。当然,在看着一片博客的时候,会默认为你已经了解啥是欧拉角了,并且知道,它是怎么用的。
这一篇中还是有大量的数学公式,写起来听麻烦的,因此我们贴图,还有,我们不是专业的数学课,只是讲这些数学只是在游戏中的应用,不讲某一些数学公式的推到过程。
1.欧拉角转换为四元数:
设四元数q=(w,x,y,z),绕着空间中任意一个向量n=<nx,ny,nz>旋转,则这个四元数q=(cosθ/2,nx*sinθ/2,ny*sinθ/2,nz*sinθ/2)。欧拉角的分量h,p,b都讲转换为四元数。
因此,我们得到每一个分量:
所以,四元数q=hxpxb,注意中间的是向量的叉乘。
注意,这是从物体坐标系到惯性坐标系,而从惯性坐标系到物体坐标系是这个四元数的共轭四元数。
2.四元数转换为欧拉角
在这里我们需要借助于矩阵来实现我们的转换。
首先,将四元数转换为矩阵,然后再将矩阵转换为四元数。
2.1矩阵转换为四元数:
首先,将欧拉角转换为旋转矩阵:从物体坐标系到惯性坐标系
其中BPH都是欧拉角绕着旋转轴的旋转矩阵。其中我们可以得到
m32=-sinp,p=-arcsin(m32)
m31/m33=sinh/cosh=tanh,h=arctan(m31/m33)
m12/m22=sinb/cosb=tanb,b=arctan(m12/m22)
之前,我们得到了四元数和矩阵之间转换,他们个个元素之间的对应关系是:
进一步:
因此,我们可以得到,四元数和欧拉角之间各个元素之间的关系:
最后希望各位看客将这些公式能够编程实现,能够理解的更加的透彻