Puede descomponer la matriz M=TRS en transformaciones básicas: traslación, escala y rotación. Dada esta matriz:
M=⎡⎣⎢⎢⎢a00a10a200a01a11a210a02a12a220a03a13a231⎤⎦⎥⎥⎥
t=(a03,a13,a23)
s=(s0,s1,s2)
s0=∥(a00,a10,a20)∥s1=∥(a01,a11,a21)∥s2=∥(a02,a12,a22)∥
Ahora que tiene la escala, puede deshacerse de ella usando la que corresponde a multiplicando la matriz con el inverso de la escala para get3×3RSS−1R
(RS)S−1=⎡⎣⎢a00a10a20a01a11a21a02a12a22⎤⎦⎥⎡⎣⎢s0000s1000s2⎤⎦⎥−1=⎡⎣⎢a00a10a20a01a11a21a02a12a22⎤⎦⎥⎡⎣⎢1/s00001/s10001/s2⎤⎦⎥
Así ( ):(RS)S−1=RI=R
R=⎡⎣⎢a00/s0a10/s0a20/s0a01/s1a11/s1a21/s1a02/s2a12/s2a22/s2⎤⎦⎥
Esta es la matriz de rotación final. Puede descomponerlo aún más de muchas maneras. Es bastante largo pero puede buscar descomponer una matriz de rotación .
Este método solo proporciona valores equivalentes en forma de traslación, escala y rotación (la matriz original puede ser el resultado de otros tipos de transformaciones). Puede tener problemas con la precisión de coma flotante con los ángulos de rotación si usa más los ángulos descompuestos, se pueden acumular errores de redondeo en los cálculos. No debe usarlo a menos que no haya construido la matriz usted mismo.
Si usted es quien construyó la matriz y quería la descomposición para poder editar y mostrar la traducción, la escala y la rotación de forma individual e independiente , probablemente la razón más limpia es almacenar los componentes de , y en una clase de transformación individualmente como vectores (quizás cuaternión para la rotación). Solo cuando necesite la matriz de transformación, construya una matriz partir de estos componentes (puede almacenar en caché la matriz hasta que se cambie algún componente).tsrTRS