Розкладання матриці афінного перетворення
Отже, нехай матриця, що задає довільне перетворення на площині, має вигляд:
Нехай точка на площині задається вектор-рядком виду (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.
Хардкорна конфа за С++. Ми запрошуємо лише профі.