Ответы:
Вы можете разложить матрицу на базовые преобразования: перемещение, масштабирование и вращение. Учитывая эту матрицу:
Теперь у вас есть шкала, вы можете избавиться от нее, используя подматрицу , соответствующую , умножив матрицу на обратную шкалу чтобы get
Таким образом ( ):
Это окончательная матрица вращения. Вы можете в дальнейшем разложить его разными способами. Это довольно долго, но вы можете найти декомпозицию матрицы вращения .
Этот метод дает только эквивалентные значения в виде перевода, масштабирования и поворота (исходная матрица может быть результатом других типов преобразований). Могут возникнуть проблемы с точностью с плавающей точкой с углами поворота, если вы в дальнейшем будете использовать разложенные углы, ошибки округления могут накапливаться в вычислениях. Вам не следует использовать его, если вы сами не создали матрицу.
Если вы - тот, кто построил матрицу и хотел разложения, чтобы иметь возможность редактировать и отображать перевод, масштабирование и вращение по отдельности и независимо , вероятно, самое чистое, почему хранить компоненты , и в классе преобразования индивидуально как векторы (может быть кватернионом для вращения). Только когда вам нужна матрица преобразования, создайте матрицу из этих компонентов (матрицу можно кэшировать до тех пор, пока какой-либо компонент не будет изменен).