2016-05-20 16 views
0

Nehmen wir an, wenn ich einen Zylinder transformieren muss, muss ich zuerst eine Skalierungsmatrix (sx, sy, sz) verwenden und sie mit einer Translationsmatrix multiplizieren (tx , ty, tz), um eine neue Matrix zu bilden, die durch diese zwei Matrix kombiniert wird. => M = T * S.Transformierte Primitive - Berechne die Inverse einer Matrix ohne irgendeine Funktion

Dann möchte ich das Inverse einer Matrix M^-1 berechnen, ohne irgendeine Funktion zu verwenden, ich weiß, dass das Inverse einer Skalierungsmatrix einen Skalierungsfaktor (1/sx, 1/sy, 1/sz) und hat eine Umkehrung einer Übersetzungsmatrix hat (-tx, -ty, -tz), aber wie kann ich M^-1 ohne irgendeine Funktion in C++ erhalten?

Antwort

0

Angenommen, Sie möchten einen Vektor um einige Faktoren Sx, Sy und Sz skalieren. Die Transformationsmatrix für das wie folgt aussieht:

Sx 0 0 0 
0 Sy 0 0 
0 0 Sz 0 
0 0 0 1 

Dann Sie den Vektor durch einige Faktoren Tx, Ty und Tz übersetzen möchten. Die Transformationsmatrix für diese sieht jetzt aus wie:

Sx 0 0 Tx 
0 Sy 0 Ty 
0 0 Sz Tz 
0 0 0 1 

Die Umkehrung dieser speziell Matrix

1/Sx 0 0 -Tx/Sx 
0 1/Sy 0 -Ty/Sy 
0 0 1/Sz -Tz/Sz 
0 0 0  1 

.. solange Sx ist, Sy und Sz sind alle != 0.

Abhängig von Ihrer Anwendung können Sie besser eine allgemeine Matrixinversionsmethode schreiben. Beachten Sie, dass es Fälle gibt, in denen eine Transformationsmatrix (oder eine beliebige Matrix) nicht invertierbar ist ... wie wenn Ihr Skalierungsfaktor in einer oder mehreren der Dimensionen 0 ist. Allgemeiner ist eine Matrix invertierbar, wenn und nur wenn ihre Determinante ungleich Null ist .