PDA

View Full Version : How to decompose a matrix?

LangFox
03-02-2004, 09:30 PM
Hi everyone,
if given a matrix multiplied by three matrix: scale, rotation and translation, how to decompose it to get the three original matrix? Thank you in advance.

LangFox
03-02-2004, 10:57 PM
It may be like this:

matScale =
| S 0 |
| 0 1 |

matRotattion =
| R 0 |
| 0 1 |

matTranslation =
| A 0 |
| T 1 |

A is the identified matrix.

matScale x matRotattion x matTranslation =
| SxR 0 |
| T 1 |

Now I can get the matTranslation, but how to get matScale and matRotattion from SxR ?

Phil Atkin
03-03-2004, 02:01 AM
OK, strip out the translation from your composite result matrix.

If the scale is uniform I think this will work - pass a unit vector [1,0,0] for example into your composite result matrix matrix, and normalize it to find the incoming scale. Then scale the composite matrix by 1/scale. I *think* you'll be left with the original rotation matrix.

If the scale isn't uniform this is highly unlikely to work!

LangFox
03-03-2004, 03:45 PM
Thank you! I will try it.

Phil Atkin
03-04-2004, 03:28 AM
Note, when I said 'normalize', I *actually* meant determine the radius - if your vector [1,0,0] comes out as [0.5, -0.8, 0.9 ] the implication is a scale of 1.3038, so multiply the matrix by 0.767 to get the original rotation.