Изменение порядка XYZ при преобразовании углов Эйлера в кватернионы - PullRequest
0 голосов
/ 25 апреля 2018

Я использую следующий код для получения кватерниона из углов Эйлера XYZ в радианах:

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,
             ]

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

Это производит кватернион, который сначала вращается вокругz, затем y, затем, наконец, ось X - ZYX.Можно ли изменить эту формулу так, чтобы она вращалась вокруг осей в другом порядке?То, что я ищу, это наоборот, так что XYZ.

1 Ответ

0 голосов
/ 25 апреля 2018

Если кому-то интересно ...

Да, возможно, в этом случае мне просто нужно было поменять местами знаки плюс и минус, чтобы получить ордер 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

...