Anda dapat menguraikan matriks menjadi transformasi dasar: terjemahan, penskalaan, dan rotasi. Diberikan matriks ini:M=TRS
M=⎡⎣⎢⎢⎢a00a10a200a01a11a210a02a12a220a03a13a231⎤⎦⎥⎥⎥
Anda dapat menguraikan terjemahan dengan inspeksi menggunakan kolom terakhir .t=(a03,a13,a23)
Untuk penskalaan, kita tahu bahwa tiga kolom pertama dari matriks sesuai dengan basis (sumbu). Kita bisa mendapatkan skala dengan panjang / norma vektor-vektor ini, yaitu berapa banyak basis yang diskalakan. Jadi skalanya adalah mana:s=(s0,s1,s2)
s0=∥(a00,a10,a20)∥s1=∥(a01,a11,a21)∥s2=∥(a02,a12,a22)∥
Sekarang Anda memiliki skala, Anda dapat membuangnya menggunakan sub-matriks yang sesuai dengan dengan mengalikan matriks dengan kebalikan dari skala untuk dapatkan3×3RSS−1R
(RS)S−1=⎡⎣⎢a00a10a20a01a11a21a02a12a22⎤⎦⎥⎡⎣⎢s0000s1000s2⎤⎦⎥−1=⎡⎣⎢a00a10a20a01a11a21a02a12a22⎤⎦⎥⎡⎣⎢1/s00001/s10001/s2⎤⎦⎥
Jadi ( ):(RS)S−1=RI=R
R=⎡⎣⎢a00/s0a10/s0a20/s0a01/s1a11/s1a21/s1a02/s2a12/s2a22/s2⎤⎦⎥
Ini adalah matriks rotasi final. Anda selanjutnya dapat menguraikannya menggunakan banyak cara. Itu berhenti panjang tetapi Anda dapat mencari untuk menguraikan matriks rotasi .
Metode ini hanya memberikan nilai yang setara dalam bentuk terjemahan, penskalaan dan rotasi (matriks asli mungkin hasil dari jenis transformasi lain). Ini mungkin memiliki masalah dengan presisi floating point dengan sudut rotasi jika Anda lebih lanjut menggunakan sudut yang terdekomposisi, kesalahan pembulatan dapat menumpuk di dalam perhitungan. Anda tidak boleh menggunakannya kecuali Anda tidak membuat sendiri matriksnya.
Jika Anda adalah orang yang membuat matriks dan menginginkan dekomposisi agar dapat mengedit dan menampilkan terjemahan, skala, dan rotasi secara individual dan mandiri , mungkin yang paling bersih mengapa menyimpan komponen , dan dalam kelas transformasi secara individual sebagai vektor (mungkin angka empat untuk rotasi). Hanya ketika Anda membutuhkan matriks transformasi, buatlah matriks dari komponen-komponen ini (Anda dapat men-cache matriks sampai beberapa komponen diubah).tsrTRS