Wie kann ich den Effekt einer Transformationsmatrix umkehren?

13

Ich habe kürzlich an einem Spiel mit OpenGL und C ++ über GLFW gearbeitet.

Im Spiel habe ich ein Luftschiff mit einem darauf montierten Turm. Das Luftschiff bewegt sich in Weltraumkoordinaten und der Turm 'folgt' ihm.

Der Turm verfügt über einen eigenen Koordinatenraum für die Blick- / Zielrichtung. Wenn der Turm in Richtung zielt (0,0,1), zielt er grundsätzlich parallel zur Bewegungsrichtung des Luftschiffs.

Um dem Turm ein Weltraumziel zu geben, habe ich eine Matrix, die Weltraumkoordinaten aufnimmt und diese in Turmraumkoordinaten umwandelt.

Wenn der Turm abgefeuert wird, soll er Projektile im Weltraum erzeugen. Gibt es also eine elegante Möglichkeit, meine Transformationsmatrix zu verwenden, um die Koordinaten des Turmraums wieder in den Weltraum umzuwandeln?

Eine allgemeinere Art, die Frage zu stellen, könnte sein: Wenn ich eine Matrix habe M, die Koordinaten von Raum Azu Raum nimmt B. Gibt es eine einfache Möglichkeit M, die Koordinaten von Bbis zu ermitteln A?

user1291510
quelle

Antworten:

19

Solange die Matrix Mist umkehrbar (was es in der Regel, es sei denn Sie etwas sehr Ungewöhnliches tun), dann die Berechnung der inversen Matrix von Mfinden Sie eine Matrix geben , das tut , was Sie wollen.

Das heißt, wenn Meine Transformation durchgeführt wird, wird inverse(M)die "entgegengesetzte" Transformation durchgeführt.

Die meisten Matrix- / Vektorbibliotheken bieten ein Mittel zur Berechnung der Inversen.


quelle
1
Bonusfrage (Sie scheinen eine Person zu sein, die die Antwort kennt): Würden nicht invertierbare Transformationsmatrizen visuell interessante Ergebnisse liefern?
user1306322
6
@ user1306322 Vielleicht. Eine Projektion in eine niedrigere Dimension (z. B. Null für alle X-Werte) wäre eine nicht invertierbare Transformation, da Sie Werte wegwerfen. Es ist in dem Sinne interessant, dass es nützlich ist, aber nicht, dass Sie irre Ergebnisse erzielen. "Invertierbarkeit" und "visuell interessant" sind orthogonal.
Congusbongus
@ Congusbongus Nö! Die Projektion von 3D auf 2D ist ein Standard-Hack, um Schlagschatten auf planaren Empfängern zu erhalten.
Imallett
@ user1306322 Möglicherweise interessieren Sie sich für die Moore-Penrose-Pseudoinverse
Tobias Kienzler
5

Wenn Ihre Transformationsmatrix eine Rotationsmatrix ist, können Sie das Problem vereinfachen, indem Sie die Tatsache ausnutzen, dass die Inverse einer Rotationsmatrix die Transponierte dieser Matrix ist.

Wenn Ihre Transformationsmatrix eine Rotation gefolgt von einer Translation darstellt, behandeln Sie die Komponenten separat. Die Umkehrung ist gleichbedeutend mit dem Subtrahieren der Translation und dem anschließenden Anwenden der Transponierung der Rotationsmatrix.

Praxeolitische
quelle
2

In Ihrer Matrix-Bibliothek gibt es wahrscheinlich eine Funktion namens Inverse. Das ist wahrscheinlich das, wonach Sie suchen.

user55564
quelle