Матрица с несколькими сдвигами как комбинация вращения, неравномерного масштаба и вращения? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь выяснить, как получить эквивалент произвольной аффинной трехмерной матрицы, используя только перемещение, вращение и неравномерное масштабирование.

Обработка сдвига - сложная часть.Одиночное преобразование сдвига может быть выражено как комбинация вращения, неоднородного масштаба и вращения, как обсуждено здесь: Матрица сдвига как комбинация базового преобразования?

Однако для 3D существуетможно резать одновременно на нескольких плоскостях;например XY, XZ и YZ.Хотя я мог бы выразить каждый из них с вращением, масштабированием, вращением, это было бы в общей сложности 6 вращений и 3 операции масштабирования.У меня есть интуиция, что все сдвиги можно обрабатывать сразу одним вращением, неравномерной шкалой и вращением, но математика затрагивает мою голову.

Я не уверен, что представляет собой сдвиг по сравнению свращение при взгляде на произвольную аффинную матрицу (я думаю, что есть бесконечные решения для того, как это разделить?), поэтому я думаю, что решение вопроса о «произвольном разделении по нескольким плоскостям» такое же, как решение для просто аффинных матриц (без перевода) вгенеральный.В любом случае, все, что может мне помочь на этом пути, ценится.

1 Ответ

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

A (полный) SVD приближает вас. Это дает для матрицы 3х3 A

A = U*S*V'

, где все матрицы 3х3, S диагональна, а U и V ортогональны. К сожалению, U и V не могут быть вращениями, то есть они могут иметь определитель -1.

Один из возможных способов - вычислить определитель U и, если он равен -1, заменить на

U~ = U * diag(-1,1,1) (ie negate the first col of U)

и замените S на

S~ = S*diag( -1, 1, 1) (ie negate the top left elt of S)

И затем аналогично для V (хотя сейчас, из-за транспонирования, вы хотите отрицать первый ряд V)

...