Разложить сложное матричное преобразование в ряд простых преобразований?
Интересно, возможно ли (и если да, то каким образом) повторно представить произвольное преобразование матрицы M3 в виде последовательности более простых преобразований (таких как translate, scale, skew, rotate)
Другими словами: как рассчитать матрицы MTranslate, MScale, MRotate, MSkew из MComplex, чтобы было выполнено следующее уравнение:
MComplex = MTranslate * MScale * MRotate * MSkew (или в другом порядке)
2 ответа
Разложение по единственному значению (см. Также этот блог и этот PDF). Он превращает произвольную матрицу в композицию из 3 матриц: ортогональная + диагональная + ортогональная. Ортогональные матрицы являются матрицами вращения; Диагональная матрица представляет собой перекос вдоль основных осей = масштабирование.
Перевод вбрасывает в игру обезьяну, но вам нужно вынуть часть матрицы для перевода, чтобы у вас была матрица 3х3, запустите SVD, чтобы получить вращение и наклон, затем добавьте часть перевода обратно в Таким образом, у вас будет вращение + масштаб + вращение + перевод композиции из 4 матриц. Вероятно, возможно сделать это в 3 матрицах (вращение + масштабирование по некоторому набору осей + перемещение), но я не уверен точно, как... возможно 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 в другом месте), вы хорошо. Если это не так, начните все сначала, но выберите разные матрицы;-)
Фактически, используя символический метод выше, вы можете создать систему уравнений, которая даст вам параметризованные формулы для всех этих матриц.
Насколько полезными были бы эти разложения для вас, ну, это другая история.
Если вы введете это в Mathematica или Maxima, они подсчитают это за вас в кратчайшие сроки.