Разложить сложное матричное преобразование на серию простых преобразований?

StackOverflow https://stackoverflow.com/questions/1177017

Вопрос

Интересно, возможно ли (и если да, то как) представить произвольное преобразование матрицы M3 как последовательность более простых преобразований (таких как перемещение, масштабирование, наклон, поворот)

Другими словами:как вычислить матрицы MTranslate, MScale, MRotate, MSkew из MComplex, чтобы следующее уравнение было верным:

MComplex = MTranslate * MScale * MRotate * MSkew (или в другом порядке)

Это было полезно?

Решение

Разложение по сингулярным значениям (смотрите также этот блог и это PDF).Он превращает произвольную матрицу в композицию из трех матриц:ортогональный + диагональ + ортогональный.Ортогональные матрицы являются матрицами вращения;диагональная матрица представляет перекос по основным осям = масштабирование.

Перевод вносит в игру непростую ситуацию, но вам следует удалить часть перевода из матрицы, чтобы у вас была матрица 3x3, запустить SVD для этого, чтобы получить вращение + наклон, а затем добавить часть перевода обратно. .Таким образом, у вас будет композиция вращения + масштабирования + вращения + перевода из 4 матриц.Вероятно, это можно сделать с помощью трех матриц (вращение + масштабирование по некоторому набору осей + перемещение), но я не уверен, как именно...возможно, QR-разложение (Q = ортогонально = вращение, но я не уверен, является ли R только косым или имеет вращательную часть.)

Другие советы

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

Для любой заданной квадратной матрицы A существует бесконечно много матриц B и C так что A = B*C.Выберите любую обратимую матрицу B (что означает, что B^-1 существует или det(B) != 0), и теперь C = B^-1*A.

Итак, для вашего решения сначала разложите MC в MT и MS*MR*MSk*I, выбирая MT в качестве некоторой обратимой матрицы транспонирования.Затем разложите остальное на MS и MR*MSk*I так что MS — произвольная матрица масштабирования.И так далее...

Теперь, если в конце веселья I это единичная матрица (с 1 по диагонали и 0 в других местах), все в порядке.Если это не так, начните сначала, но выберите другие матрицы ;-)

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

Насколько вам были бы полезны эти разложения, ну – это уже другая история.

Если вы введете это в Математика или Максима они быстро рассчитают это для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top