Відповіді:
Можна розкласти матрицю на основні перетворення: переклад, масштабування та обертання. Враховуючи цю матрицю:
Тепер у вас є шкала, ви можете позбутися її за допомогою підматриці яка відповідає , помноживши матрицю на обернену шкалу на get
Таким чином ( ):
Це остаточна матриця обертання. Можна далі розкласти його, використовуючи багато способів. Він досить тривалий, але ви можете шукати декомпозицію матриці обертання .
Цей метод дає лише еквівалентні значення у вигляді перекладу, масштабування та обертання (оригінальна матриця, можливо, є результатом інших типів перетворень). Може виникнути проблеми з точністю з плаваючою точкою з кутами повороту, якщо ви додатково використали розкладені кути, в обчисленнях можуть накопичуватися помилки округлення. Не слід використовувати його, якщо ви самі не побудували матрицю.
Якщо ви є тим, хто сконструював матрицю і хотів декомпозиції, щоб мати можливість редагувати та відображати переклад, масштаб та обертання окремо і незалежно , ймовірно, найчистіше, чому потрібно зберігати компоненти , і в класі перетворення окремо як вектори (можливо, кватерніон для обертання). Тільки коли вам потрібна матриця перетворення, з цих компонентів матрицю (Ви можете кешувати матрицю, поки якийсь компонент не буде змінений).