Sie können die Matrix M=TRS in grundlegende Transformationen zerlegen : Translation, Skalierung und Rotation. Angesichts dieser Matrix:
M=⎡⎣⎢⎢⎢a00a10a200a01a11a210a02a12a220a03a13a231⎤⎦⎥⎥⎥
Sie können die Übersetzung durch Inspektion unter Verwendung der letzten Spalte zerlegen .t=(a03,a13,a23)
Für die Skalierung wissen wir, dass die ersten drei Spalten der Matrix den Basen (Achsen) entsprechen. Wir können die Skalierung durch die Länge / Norm dieser Vektoren erhalten, dh wie stark die Basen skaliert wurden. Die Skala ist also wobei:s=(s0,s1,s2)
s0=∥(a00,a10,a20)∥s1=∥(a01,a11,a21)∥s2=∥(a02,a12,a22)∥
Wenn Sie nun die Skala haben, können Sie sie mithilfe der -Untermatrix, die R S entspricht, entfernen, indem Sie die Matrix mit der Umkehrung der Skala S - 1 multiplizieren , um R zu erhalten3×3RSS−1R
(RS)S−1=⎡⎣⎢a00a10a20a01a11a21a02a12a22⎤⎦⎥⎡⎣⎢s0000s1000s2⎤⎦⎥−1=⎡⎣⎢a00a10a20a01a11a21a02a12a22⎤⎦⎥⎡⎣⎢1/s00001/s10001/s2⎤⎦⎥
Somit ist ( ):(RS)S−1=RI=R
R=⎡⎣⎢a00/s0a10/s0a20/s0a01/s1a11/s1a21/s1a02/s2a12/s2a22/s2⎤⎦⎥
Dies ist die endgültige Rotationsmatrix. Sie können es auf viele Arten weiter zerlegen. Es ist sehr langwierig, aber Sie können nach dem Zerlegen einer Rotationsmatrix suchen .
Diese Methode liefert nur äquivalente Werte in Form von Translation, Skalierung und Rotation (die ursprüngliche Matrix kann das Ergebnis anderer Arten von Transformationen sein). Wenn Sie die zerlegten Winkel weiter verwenden, kann es zu Problemen mit der Gleitkommapräzision bei den Drehwinkeln kommen. Bei den Berechnungen können sich Rundungsfehler ansammeln. Sie sollten es nur verwenden, wenn Sie die Matrix nicht selbst erstellt haben.
tsrTRS