在3D开发中,旋转是一个重点。因为,在3D空间中,物体旋转的角度是360度,全方位的旋转。我们之间学习了在3D数学中,解决旋转问题主要依靠的工具就是:矩阵,四元数和欧拉角。他们之间都是可以转换的,今天我们和大家分享的是四元数和矩阵之间的转换。因为,这一节含有大量的公式和方法,数学公式在电脑上书写起来比较的费劲,我们就直接贴图。
1.四元数转换为矩阵
在3D空间中,物体绕着任意一个向量<nx,ny,nz>,旋转角度θ,旋转的旋转矩阵是:
在空间中一个任意的四元数:q=<w,x,y,z>。而这个四元数也可以表示为绕着上面的旋转向量,旋转θ之后的形式:
然后,我们伟大的数学家他们就通过这些公式推导出来,四元数转换为矩阵的数学公式,推导公式就不写了(因为太难了,我以为看不懂。。。。)
这是从惯性坐标系到物体坐标系的。因为旋转矩阵是正交矩阵,所以他的转置和他的逆矩阵是相同的。因此,从物体坐标系转换到惯性坐标系,就是求之前矩阵的逆矩阵,也就是转置矩阵。
2.矩阵转换为四元数
根据上面求出的矩阵,怎么实现将矩阵转换为四元数?
设一个四元数为:q=<w,x,y,z>
旋转矩阵为:
通过求解这个矩阵的迹,也就是死主对角线之和,来求解出
w=m11+m22+m33=4*w*w-1。具体的推导过程就不写了,注意x,y,z的平方和是1-w的平方。
同理我们也能求解出x,y,z。
公式1:
但是注意,我们在求解w,x,y,z时,不会全部使用这个公式,因为它求解出来的全部是正数,而四元数却不全是正数。因此,我们还要结合其他的公式,例如:
公式2:
通过这些公式和上面的公式结合,我们就能求解出w,x,y,z.。问题是怎么结合?
首先,我们通过公式1 求解出w,x,y,z中最大的那个数。但是要注意一个技巧,在这里我们不一定要统统的求出这些数,比较他们平方的也能比较出他们的最大的。然后通过比较出来的最大值,我们结合公式2,求解出来每一个数。