Разложить сложное матричное преобразование в ряд простых преобразований? - PullRequest
9 голосов
/ 24 июля 2009

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

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

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

Ответы [ 2 ]

9 голосов
/ 24 июля 2009

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

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

0 голосов
/ 24 июля 2009

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

Для любой данной квадратной матрицы 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 , они будутрассчитать это для вас в кратчайшие сроки.

...