Q1. Я хочу сопоставить точки (x1, x2, x3) с точками (y1, y2, y3). Работает ли getAffineTransform
всегда возвращать одну и ту же матрицу преобразования независимо от порядка этих точек?
Q2. Если я знаю, что эти точки преобразуются только путем поворота и перемещения без какого-либо масштабирования, что будет проще всего удалить масштабированием из матрицы преобразования, возвращаемой getAffineTransform
,
А1, да, решение должно быть уникальным, если два набора точек не коллинеарны.
A2, ваша матрица результатов будет иметь вид:
[ A B C ]
[ D E F ]
C ваш перевод в х; F ваш перевод в у. Оба являются масштабно-инвариантными.
Если вы возьмете самые левые термины, они соответствуют вращению и масштабу
[A B]
[D E]
в следующей формуле:
[I cos(t) -I sin(f)]
[J sin(t) J cos (F)]
где I — шкала в x, а J — шкала в y.
Чтобы удалить масштабирование, разделите на A и B на sqrt (A * A + B * B) и D и E на sqrt (D * D + E * E)
Других решений пока нет …