Risposte:
È possibile scomporre la matrice in trasformazioni di base: traslazione, ridimensionamento e rotazione. Data questa matrice:
È possibile scomporre la traduzione mediante ispezione utilizzando l'ultima colonna .
Per il ridimensionamento, sappiamo che le prime tre colonne della matrice corrispondono alle basi (assi). Possiamo ottenere la scala dalla lunghezza / norma di questi vettori, cioè da quanto sono state ridimensionate le basi. Quindi la scala è dove:
Ora hai la scala, puoi sbarazzartene usando la sotto-matrice che corrisponde a moltiplicando la matrice con l'inverso della scala per getR S S - 1 R
Pertanto ( ):
Questa è la matrice di rotazione finale. Puoi scomporlo ulteriormente in molti modi. È molto lungo ma puoi cercare di decomporre una matrice di rotazione .
Questo metodo fornisce solo valori equivalenti sotto forma di traslazione, ridimensionamento e rotazione (la matrice originale potrebbe essere il risultato di altri tipi di trasformazioni). Potrebbe avere problemi con la precisione in virgola mobile con gli angoli di rotazione se si utilizzavano ulteriormente gli angoli decomposti, gli errori di arrotondamento potrebbero accumularsi nei calcoli. Non dovresti usarlo a meno che tu non abbia costruito tu stesso la matrice.
Se sei tu quello che ha costruito la matrice e hai voluto la decomposizione per poter modificare e visualizzare la traduzione, la scala e la rotazione individualmente e indipendentemente , probabilmente il modo più pulito per archiviare i componenti di , e in una classe di trasformazione individualmente come vettori (forse quaternione per la rotazione). Solo quando è necessaria la matrice di trasformazione, costruire una matrice da questi componenti (è possibile memorizzare nella cache la matrice fino a quando non viene modificato un componente).s r T R S