Разложить сложное матричное преобразование на серию простых преобразований?
-
19-09-2019 - |
Вопрос
Интересно, возможно ли (и если да, то как) представить произвольное преобразование матрицы 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 в других местах), все в порядке.Если это не так, начните сначала, но выберите другие матрицы ;-)
Фактически, символически используя описанный выше метод, вы можете создать набор уравнений, которые дадут вам параметризованные формулы для всех этих матриц.
Насколько вам были бы полезны эти разложения, ну – это уже другая история.
Если вы введете это в Математика или Максима они быстро рассчитают это для вас.