Frage zu einer invertierten 4x4 Matrix



  • Guten Tag,

    wozu braucht man das Inverse einer 4x4 Matrix in der 3D-Computergrafik? Also mir ist schon klar, dass ich aus einem transformierten Punkt/Vektor mit Hilfe der Inversen Matrix wieder den Ursprungspunkt/Vektor berechnen kann(jedenfalls habe ich das bis jetzt so verstanden). Nur, wozu muss ich was wieder zurück transformieren? Könnt ihr mir da Beispiele nennen?

    Wie berechne ich am schnellsten eine Inversen einer 4x4 Matrix, also welcher Algorithmus ist der aktuell gängigste dafür?



  • sehr allgemeine Frage. Und wahrscheinlich verwendst du bereits ganz häufig inverse ohne es zu wissen. Zum Beispiel ist die Inverse einer Rotationsmatrix ihre Transponierte.

    Für allgemeine 4x4 Matrizen über die du gar nichts weißt (symmetrisch? positiv definit?) wirst du nichts besseres als gaussche Elimination finden.

    Aber Allgemein:
    http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/



  • Danke für die Antwort. Ich habe das erste Mal mit Matrizen und 3D-Grafik zu tun, denn ich schreibe eine kleine 3D-Engine in C um mir das Wissen anzueignen und gleich zu testen. Die ganzen Vektoroperationen und auch die wichtigsten Matrizenoperationen habe ich fertig, nun bin ich halt bei der invertierten Matrix angelangt, wo ich wohl ein Gleichungssystem lösen muss. Bis dahin war mir auch alles klar und einfach zu verstehen, nur komme ich jetzt bei dieser invertierten Matrix ins Schleudern.

    So, wie ich das gelesen habe, kommt man wohl nicht drum rum in einer 3D-Engine eine invertierte Matrix zu erstellen, mir ist halt nicht klar warum und wo ich diese brauche.

    Dann habe ich noch gelesen, dass beim Invertieren einer Matrix Rundungsfehler auftreten. Da stellt sich mir auch wieder die Frage, warum und sind die so stark als dass man Probleme damit bekommt?



  • Wenn dir nicht klar ist wozu du das brauchst, warum implementierst du es dann? Mach einfach weiter, wenn du das irgendwann brauchst wirst du es schon merken.



  • Zum Beispiel:
    Normalenvektoren werden nicht mit der gewöhnlichen Modelviewmatrix transformiert, sondern mit der transponierten Inversen Matrix davon (der oberen linken 3x3 Matrix um genau zu sein). Siehe: http://www-lehre.informatik.uni-osnabrueck.de/~cg/2000/skript/13_5_Transformation_der.html

    (Falls die MV-Matrix keinen Skalierungsanteil hat und nur aus Rotationskomponenten besteht, entspricht die Inverse allerdings der Transponierten selbst und zweimal transponiert ist die 3x3 Teilmatrix selbst.)



  • Bin kein Experte aber man könnte die Invertierte gebrauchen, wenn der Benutzer einen klick auf den Bildschirm macht und du willst den Punkt finden in deiner virtuellen 3D Welt. Dann musst du nämlich nicht von deiner 3D Welt auf den Bildschorm transformieren, sondern genau umgekehrt.

    Ob Rundungsfehler sich stark bemerkbar machen hängt auch vom Problem ab. Das wird durch die sogenannte Kondition(szahl) beschrieben. Es gibt gut konditionierte Probleme (wenig Einfluss der Rundungsfehler) und schlecht konditionierte (sehr großer Einfluss).
    Stell dir vor du willste den Schnittpunkt zweier Geraden berechnen. Haben die Geraden eine Winkel von ca. 90° zu einandern, wirken sich kleine Fehler kaum aus. Verschiebe ich eine der Geraden verschiebt sich der Schnittpunkt mit der gleichen Größenordnung. Die Konditionszahl ist um die eins , das ist gut konditioniert. Nun stell dir aber vor die Geraden haben einen sehr spitzen Winkel zu einander. Verschiebe ich eine Gerade, dann verschiebt sich der Schnittpunkt gewaltig. Ein kleiner Fehler in der Eingangsgröße hat einen riesigen Fehler im Ergebnis zur Folge. Das ist ein schlecht konditioniertes Problem mit ein Konditionszahl sehr viel größer als eins.


Anmelden zum Antworten