Korrekte Skalierung einer 4x4 Matrix ermitteln
-
Hallo,
ich habe in C++ eine eigene 4x4 Matrix Klasse, für Transformationen im 3 dimensionalen Raum, geschrieben.
Mit der Funktion "GetScale" ermittle ich die Skalierung der jeweiligen Matrix.
Diese Funktion ist allerdings noch sehr primitiv und sieht follgender Maßen aus:class Matrix4x4 { /* ... */ float pMat[4*4]; }; /* ... */ vector3d Matrix4x4::GetScale() { return vector3d( pMat[0], pMat[5], pMat[10] ); }
Bei dieser Funktiom stimmt der Wert nicht mehr, sobald ich die Matrix rotiere.
Wie kann ich also die korrekte Skalierung ermitteln, auch wenn die Matrix rotiert ist?
-
Dazu musst die 3x3 Teil-Matrix mit einer Polardekompostion in einen Anteil mit Rotationen und Scherungen bzw. Skalierungen zerlegen. Ist nicht ganz trivial ...
-
stichwort: eigenwerte