Розкладання матриці афінного перетворення

Отже, нехай матриця, що задає довільне перетворення на площині, має вигляд:

Нехай точка на площині задається вектор-рядком виду (x, y, 1), а її перетворення - множенням праворуч на матрицю перетворення:

У згаданій вище статті стверджується, що довільна матриця M центроафінного перетворення може бути представлена ​​як добуток матриць R повороту, матриці Hx зсуву вздовж осі X і матриці S масштабування:

При розкладанні довільної матриця афінного перетворення необхідно привести центр трансформації до центру координат, а також врахувати перетворення переносу:

Підставивши вирази для матриць простих перетворень отримаємо такі вирази для коефіцієнтів M:

Вирішуючи дані рівняння щодо sx, sy, α, hx, tx, ty, після деяких спрощень, отримаємо вирази для параметрів, що шукаються:

Вирази для α, sx, sy, hx відповідають аналогічним у статті¹, хоча й дещо відрізняються від них за формою. Крім того, ми отримали формули розрахунку параметрів перетворення перенесення tx і ty. Хочеться також зауважити, що навіть якщо в оригінальній послідовності були зрушення вздовж обох осей, у розкладанні достатньо лише зсуву вздовж однієї з осей (тут - уздовж осі X). Крім того, оскільки кут повороту визначений як результат функції арктангенса, він принципово обмежений значеннями від -90 до +90. Враховуючи також, що кут повороту на 180˚ відповідає sx=-1 та sx=-1, ми маємо тут деяку неоднозначність. Наприклад, спочатку маючи поворот на 120˚ при розкладанні за цим алгоритмом ми отримаємо -60˚ і sx=sy=-1.

Хардкорна конфа за С++. Ми запрошуємо лише профі.