2009-07-24 4 views
8

Je me demande s'il est possible (et si elle est alors comment) de re-présente une transformation de la matrice M3 arbitraire comme une séquence de transformations plus simples (comme la traduction, à l'échelle, inclinaison, rotation)Décomposer une transformation matricielle complexe en une série de transformations simples?

En d'autres termes: comment calculer mTranslate, MScale, MRotate, matrices MSkew de la MComplex de telle sorte que l'équation suivante serait vrai:

MComplex = mTranslate * MScale * MRotate * MSkew (ou dans un autre ordre)

Répondre

9

Singular Value Decomposition (voir également this blog et ce PDF). Il transforme une matrice arbitraire en une composition de 3 matrices: orthogonale + diagonale + orthogonale. Les matrices orthogonales sont des matrices de rotation; la matrice diagonale représente l'inclinaison le long des axes primaires = mise à l'échelle. La traduction jette une clé de singe dans le jeu, mais ce que vous devez faire est de supprimer la partie de traduction de la matrice afin d'avoir une matrice 3x3, lancer SVD pour vous donner la rotation + inclinaison, puis ajouter le traduction de retour. De cette façon, vous aurez une rotation + échelle + rotation + traduire la composition de 4 matrices. Il est probablement possible de le faire dans 3 matrices (rotation + mise à l'échelle le long d'un ensemble d'axes + translation) mais je ne sais pas exactement comment ... peut-être une décomposition QR (Q = orthogonale = rotation, mais je ne sais pas le R est asymétrique ou a une partie rotationnelle.)

1

Oui, mais la solution ne sera pas unique. Aussi, vous devriez plutôt mettre fin à la traduction (de l'ordre du reste n'a pas d'importance)

Pour toute matrice carrée donnée A il existe une infinité de matrices B et C pour que A = B*C. Choisissez une matrice inversible B (ce qui signifie que B^-1 existe ou det (B)! = 0) et maintenant C = B^-1*A. Pour votre solution, décomposer d'abord MC en MT et MS*MR*MSk*I, en choisissant MT comme matrice de transposition inversible. Puis décomposer le reste en MS et MR*MSk*I de sorte que MS est une matrice de mise à l'échelle arbitraire. Et ainsi de suite ...

Maintenant si à la fin de l'amusement I est une matrice d'identité (avec 1 sur la diagonale, 0 ailleurs), vous êtes bon. Si ce n'est pas le cas, recommencez, mais choisissez différentes matrices ;-)

En fait, en utilisant la méthode ci-dessus symboliquement, vous pouvez créer un ensemble d'équations qui vous donnera une formule paramétrée pour toutes ces matrices.

A quel point ces décompositions seraient utiles pour vous, c'est une autre histoire.

Si vous tapez ceci dans Mathematica ou Maxima ils calculent pour vous en peu de temps.

+0

Vous avez un bon point, sauf que ces matrices ont des liaisons supplémentaires (la traduction est la matrice d'identité avec la colonne la plus à droite contenant le vecteur de traduction, etc.). Autant que je puisse imaginer, ces quatre transformations - à condition que cet ordre soit fixé - devraient donner un résultat sans ambiguïté. – samuil

Questions connexes