Matrizen rückrechnen

Hallo zusammen und ein frohes Weihnachtsfest,
ich habe leider ein Problem mit der Matrizenrechnung und hoffe irgendwie, hier fündig zu werden.
Im Grunde gehts mir darum, aus bereits multiplizierten Matrizen wieder die ursprüngliche/n zu machen.
Ich weiß leider nicht, ob das überhaupt geht.

Wer ganz es konkret wissen will sollte vielleicht wissen, dass ich versuche, ein wenig Computergrafik zu machen. Dabei werden „Objekte“ über 4x4 Matrizen im Raum bewegt.
Diese sehen konkret so aus:
http://www.cprogramming.com/tutorial/3d/rotationMatr…
oder
http://www.morrowland.com/apron/tutorials/gl/gl_matr…
Nun habe ich aber folgendes Problem. Ich muss aus einem Punkt, der beispielsweise mit einer dieser Rotationsmatrizen „verschoben“ wurde, wieder an den Ausgangspunkt versetzen.
Ich habe jedoch das Problem, dass ich keine „Reihenfolge“ der Matrixmultiplikationen habe. Es könnte also sein, dass der ursprüngliche Punkt (bsp. bei 0,0,0) zuerst verschoben wurde (TranslationsMatrix) und dann Rotiert oder umgekehrt.
Ist es nun möglich, anhand der Matrix (sie sieht ja je nach Reihenfolge anders aus), das irgendwie zurück zu berechnen?

Beispielsweise ist der Punkt 0,0,0
Translation(2,0,0) * rotationUmZ(90)
die Matrix:
0 -1 0 2
1 0 0 0
0 0 1 0
0 0 0 1

Man könnte also bei einem so leichten Beispiel erkennen, was passiert ist und vielleicht ahnen, dass der Punkt um 2 auf der X Achse verschoben und um 90° rotiert wurde.
Anderer seits sieht die Matrix bei umgekehrter Reihenfolge so aus:
0 -1 0 0
1 0 0 2
0 0 1 0
0 0 0 1

Okay, ich schätze, das Beispiel ist halbwegs verständlich. Fragt sich nur, ob mir da irgendjemand helfen kann.

Habt vielen Dank fürs durchlesen erst einmal. Ich weiß, das ist ein großes Ding.
Danke und habt ein frohes Fest,
Tobias

Hallo Tobias,

dir auch ein frohes Fest!

Im Grunde gehts mir darum, aus bereits multiplizierten
Matrizen wieder die ursprüngliche/n zu machen.
Ich weiß leider nicht, ob das überhaupt geht.

Nein, das geht nicht, die Matrizenmultiplikation ist nicht injektiv. Bei der Multiplikation von Zahlen klappt das schon nicht. Wenn z.B. x mal y gleich 20 ist, kannst du daraus nicht schließen, was x und y sind.

Ich muss aus einem Punkt,
der beispielsweise mit einer dieser Rotationsmatrizen
„verschoben“ wurde, wieder an den Ausgangspunkt versetzen.

Verstehe ich das richtig, du hast einen Bildpunkt und eine Matrix gegeben und suchst den Urbildpunkt, der durch die gegebene Matrix auf den gegebenen Bildpunkt abgebildet wird?
Das geht, weil sowohl Rotations- als auch Translationsmatrizen invertierbar sind, und das Produkt invertierbarer Matrizen ist ebenfalls invertierbar.
Sagen wir die gegebene Abbildungsmatrix ist

M=\left(\begin{array}{cccc}m_{11} & m_{12} & m_{13} & m_{14}\m_{21} & m_{22} & m_{23} & m_{24}\m_{31} & m_{32} & m_{33} & m_{34}\m_{41} & m_{42} & m_{43} & m_{44}\end{array}\right)

und der gegebene Bildpunkt ist

b=\left(\begin{array}{c}b_1\b_2\b_3\b_4\end{array}\right)

Bei 4x4-Matrizen lohnt es sich noch, die allgemeine Inverse per Hand auszurechnen und das dann im Computerprogramm als Funktion zu implementieren. Als Weihnachtsgeschenk für dich habe ich das mal ausrechnen lassen. Um die Inverse von M zu kriegen, rechnest du
zuerst die Determinante von M aus.

\ \begin{array}{rl}d= & m_{12}m_{24}m_{33}m_{41}-m_{12}m_{23}m_{34}m_{41}-m_{11}m_{24}m_{33}m_{42}+m_{11}m_{23}m_{34}m_{42}-\ & m_{12}m_{24}m_{31}m_{43}+m_{11}m_{24}m_{32}m_{43}+m_{12}m_{21}m_{34}m_{43}-m_{11}m_{22}m_{34}m_{43}+\ &
m_{12}m_{23}m_{31}m_{44}-m_{11}m_{23}m_{32}m_{44}-m_{12}m_{21}m_{33}m_{44}+m_{11}m_{22}m_{33}m_{44}+\end{array}

\ \begin{array}{l}
m_{14}(m_{23}(m_{32}m_{41}-m_{31}m_{42})
+m_{22}(m_{31}m_{43}-m_{33}m_{41})+\ m_{21}(m_{33}m_{42}-m_{32}m_{43}))+\ m_{13}(m_{24}(m_{31}m_{42}-m_{32}m_{41})
+m_{22}(m_{34}m_{41}-m_{31}m_{44})+\ m_{21}(m_{32}m_{44}-m_{34}m_{42}))\end{array}

(Sorry für die komische Darstellung, aber bei so langen Formeln kommt die LaTeX-Verarbeitung von w-w-w an ihre Grenzen.)
Als nächstes rechnest du

\ \begin{array}{rl}n_{11}= & m_{23}m_{34}m_{42}-m_{24}m_{33}m_{42}+m_{24}m_{32}m_{43}-\ & m_{22}m_{34}m_{43}-m_{23}m_{32}m_{44}+m_{22}m_{33}m_{44}\end{array}
\ \begin{array}{rl}n_{12}= & m_{14}m_{33}m_{42}-m_{13}m_{34}m_{42}-m_{14}m_{32}m_{43}+\ & m_{12}m_{34}m_{43}+m_{13}m_{32}m_{44}-m_{12}m_{33}m_{44}\end{array}
\ \begin{array}{rl}n_{13}= & m_{13}m_{24}m_{42}-m_{14}m_{23}m_{42}+m_{14}m_{22}m_{43}-\ & m_{12}m_{24}m_{43}-m_{13}m_{22}m_{44}+m_{12}m_{23}m_{44}\end{array}
\ \begin{array}{rl}n_{14}= & m_{14}m_{23}m_{32}-m_{13}m_{24}m_{32}-m_{14}m_{22}m_{33}+\ & m_{12}m_{24}m_{33}+m_{13}m_{22}m_{34}-m_{12}m_{23}m_{34}\end{array}
\ \begin{array}{rl}n_{21}= & m_{24}m_{33}m_{41}-m_{23}m_{34}m_{41}-m_{24}m_{31}m_{43}+\ & m_{21}m_{34}m_{43}+m_{23}m_{31}m_{44}-m_{21}m_{33}m_{44}\end{array}
\ \begin{array}{rl}n_{22}= & m_{13}m_{34}m_{41}-m_{14}m_{33}m_{41}+m_{14}m_{31}m_{43}-\ & m_{11}m_{34}m_{43}-m_{13}m_{31}m_{44}+m_{11}m_{33}m_{44}\end{array}
\ \begin{array}{rl}n_{23}= & m_{14}m_{23}m_{41}-m_{13}m_{24}m_{41}-m_{14}m_{21}m_{43}+\ & m_{11}m_{24}m_{43}+m_{13}m_{21}m_{44}-m_{11}m_{23}m_{44}\end{array}
\ \begin{array}{rl}n_{24}= & m_{13}m_{24}m_{31}-m_{14}m_{23}m_{31}+m_{14}m_{21}m_{33}-\ & m_{11}m_{24}m_{33}-m_{13}m_{21}m_{34}+m_{11}m_{23}m_{34}\end{array}
\ \begin{array}{rl}n_{31}= & m_{22}m_{34}m_{41}-m_{24}m_{32}m_{41}+m_{24}m_{31}m_{42}-\ & m_{21}m_{34}m_{42}-m_{22}m_{31}m_{44}+m_{21}m_{32}m_{44}\end{array}
\ \begin{array}{rl}n_{32}= & m_{14}m_{32}m_{41}-m_{12}m_{34}m_{41}-m_{14}m_{31}m_{42}+\ & m_{11}m_{34}m_{42}+m_{12}m_{31}m_{44}-m_{11}m_{32}m_{44}\end{array}
\ \begin{array}{rl}n_{33}= & m_{12}m_{24}m_{41}-m_{14}m_{22}m_{41}+m_{14}m_{21}m_{42}-\ & m_{11}m_{24}m_{42}-m_{12}m_{21}m_{44}+m_{11}m_{22}m_{44}\end{array}
\ \begin{array}{rl}n_{34}= & m_{14}m_{22}m_{31}-m_{12}m_{24}m_{31}-m_{14}m_{21}m_{32}+\ & m_{11}m_{24}m_{32}+m_{12}m_{21}m_{34}-m_{11}m_{22}m_{34}\end{array}
\ \begin{array}{rl}n_{41}= & m_{23}m_{32}m_{41}-m_{22}m_{33}m_{41}-m_{23}m_{31}m_{42}+\ & m_{21}m_{33}m_{42}+m_{22}m_{31}m_{43}-m_{21}m_{32}m_{43}\end{array}
\ \begin{array}{rl}n_{42}= & m_{12}m_{33}m_{41}-m_{13}m_{32}m_{41}+m_{13}m_{31}m_{42}-\ & m_{11}m_{33}m_{42}-m_{12}m_{31}m_{43}+m_{11}m_{32}m_{43}\end{array}
\ \begin{array}{rl}n_{43}= & m_{13}m_{22}m_{41}-m_{12}m_{23}m_{41}-m_{13}m_{21}m_{42}+\ & m_{11}m_{23}m_{42}+m_{12}m_{21}m_{43}-m_{11}m_{22}m_{43}\end{array}
\ \begin{array}{rl}n_{44}= & m_{12}m_{23}m_{31}-m_{13}m_{22}m_{31}+m_{13}m_{21}m_{32}-\ & m_{11}m_{23}m_{32}-m_{12}m_{21}m_{33}+m_{11}m_{22}m_{33}\end{array}

Damit bildest du die Matrix

N=\left(\begin{array}{cccc}n_{11} & n_{12} & n_{13} & n_{14}\n_{21} & n_{22} & n_{23} & n_{24}\n_{31} & n_{32} & n_{33} & n_{34}\n_{41} & n_{42} & n_{43} & n_{44}\end{array}\right)

Die Inverse von M ist dann

M^{-1}=\frac{1}{d}N

und den Urbildpunkt, den du suchst, kannst du ausrechnen durch

M^{-1}b

Viel Erfolg!

hendrik

Wow, cool! Danke, danke für die ausführliche Antwort.
Ich muss aber gestehen, dass ich jetzt beim Lesen noch nicht genau weiß, ob das alles so für mich perfekt funktioniert. Das muss ich wohl die nächsten Tage einarbeiten bzw. ausprobieren.
Ich danke Dir trotzdem jetzt schon einmal für die tolle Hilfe!
Also vielen Dank und falls wir vorher nicht voneinander hören - einen guten Rutsch ins neue Jahr! :smile:
Tobias

Also vielen Dank und falls wir vorher nicht voneinander hören

  • einen guten Rutsch ins neue Jahr! :smile:

Vielen Dank, das wünsche ich dir auch.

hendrik