ARKit - eulerAngles of Transform Matrix 4x4 - PullRequest
0 голосов
/ 08 мая 2018

В моем проекте есть преобразование, и я хочу получить ориентацию этого преобразования в eulersAngles.

Как получить eulerAngles из преобразования 4 x 4 матрицы на языке Swift?

Мне нужен хотя бы Pitch, мне может понадобиться Yaw и мне может понадобиться Roll.

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

pj_mukh в своем ответе не сказал, как преобразовать матрицу преобразования, с которой мне пришлось начинать, в матрицу вращения, imallett ответил на этот вопрос здесь

После того, как вы получите матрицу вращения, вы можете рассчитать углы поворота, как сказал pj_mukh

0 голосов
/ 16 апреля 2019

eulerAngles свойство экземпляра используется для ориентации узла, выраженное в углах pitch, yaw и roll в радианах.

var eulerAngles: SCNVector3 { get set }

Порядоккомпоненты следующие:

  • Pitch (X компонент) - это вращение вокруг оси X
  • Yaw (Y компонент) - это вращение вокруг оси Y
  • Roll (Z компонент) - это вращение вокруг оси Z

Использовать eulerAngles свойство экземпляра намного проще, чем Поворот 4 x 4 Матрица .Платформы ARKit и SceneKit используют 4 x 4 Матрицы преобразования для перевода, вращения, масштабирования и сдвига 3D-объектов.Давайте посмотрим, как они работают:

Идентичность 4 x 4 Матрица имеет 16 элементов внутри:

enter image description here

Между этимиДля шестнадцати элементов существует 6 различных коэффициентов сдвига:

shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY

В Матрице сдвига они следующие:

enter image description here

Потому что в этой Матрице Rotation coefficients вообще нет , шесть Shear coefficients вместе с тремя Scale coefficients позволяют вращать трехмерные объекты вокруг X, Y и Z с помощью магической тригонометрии (sin и cos).

Вот пример того, как вращать трехмерный объект (CCW) вокруг своей оси Z с использованием элементов Shear и Scale:

enter image description here

Посмотрите на 3 различных шаблона вращения (Pitch, Yaw и Roll), используя элементы Shear и Scale:

enter image description here

Перевод 4 x 4 Матрица выглядит следующим образом:

enter image description here

Надеюсь, это поможет.

0 голосов
/ 08 мая 2018

Предполагая, что mij - это матричный элемент в i-й строке и j-м столбце.

R=atan2(m12, m22)
c2 = sqrt(m00^2 + m01^2)
P = atan2(-m02, c2)
s1 = sin(R), c1 = cos(R)
Y = atan2(s1*m20 - c1*m10, c1*m11-s1*m21)

Источник: Математика очень хорошо описана в этом документе: https://pdfs.semanticscholar.org/6681/37fa4b875d890f446e689eea1e334bcf6bf6.pdf

В отличие от перехода к кватерниону, есть некоторые угловые случаи (блокировка карданного подвеса), о которых вы должны беспокоиться, что вышеупомянутое решение справляется довольно хорошо.

...