Поворот системы координат относительно двух точек

Допустим что у меня есть сетка координат и 2 ключевые точки, при смещении этих двух ключевых точек, сетка координат должна смещаться относительно этих точек, причём нужно учесть не только смещение по координатам но и поворот каждой точки в сетке относительно двух ключевых. То есть если ключевые точки смещаются не на одинаковое расстояние и между ними возникает наклон, каждая точка в сетке должна учесть этот наклон и так же наклониться. Какие есть инструменты для удобной манипуляции сеткой, что бы не приходилось прописывать всё самому?


Ответы (1 шт):

Автор решения: MBo

При отсутствии масштабирования матрицу аффинного преобразования можно рассчитать так:

имеем начальные точки (X11, Y11), (X21, Y21)
после преобразования (X12, Y12), (X22, Y22)

Угол поворота и его косинус и синус (если я не запутался в индексах)

Fi = atan2((X22-X12)*(Y21-Y11)-(Y22-Y12)*(X21-X11), 
           (X22-X12)*(X21-X11)+(Y22-Y12)*(Y21-Y11))
c = Cos(Fi)
s = Sin(Fi) 

Вначале переносим начало координат в точку (X11, Y11)
Затем вращаем на угол Fi
Теперь переносим на (X12, Y12)
Получаем матрицу

[[c, -s, 0], 
 [s, c, 0], 
 [-x11*c-y11*s+x12, x11*s-y11*c+y12, 1]])

И в дальнейшем применяем её ко всем нужным точкам (умножаем вектор [x,y,1] на неё)

→ Ссылка