将欧拉角转换为四元数时更改XYZ顺序

时间:2018-04-24 23:06:38

标签: math geometry quaternions euler-angles

我使用以下代码以弧度从XYZ Euler-Angles生成四元数:

c1 = Math.cos( x / 2 )
c2 = Math.cos( y / 2 )
c3 = Math.cos( z / 2 )

s1 = Math.sin( x / 2 )
s2 = Math.sin( y / 2 )
s3 = Math.sin( z / 2 )

quaternion = [
              c1 * c2 * c3 - s1 * s2 * s3,
              s1 * c2 * c3 + c1 * s2 * s3,
              c1 * s2 * c3 - s1 * c2 * s3,
              c1 * c2 * s3 + s1 * s2 * c3,
             ]

自: http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm

这会产生一个四元数,首先绕z旋转,然后是y,最后是x轴 - Z-Y-X。是否可以更改此公式,使其以不同的顺序围绕轴旋转?我正在寻找的是相反的,所以X-Y-Z。

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣......

是的你可以,在这种情况下,我只需要交换加号和减号来获得X-Y-Z顺序(传统上写成ZYX)。 像这样......

       [
        c1 * c2 * c3 + s1 * s2 * s3,
        s1 * c2 * c3 - c1 * s2 * s3,
        c1 * s2 * c3 + s1 * c2 * s3,
        c1 * c2 * s3 - s1 * s2 * c3
        ]

Three.js有各种xyz命令的不同公式的完整列表 - 在函数THREE.Quaternion.setFromEuler

https://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/steps/index.htm