Поворот системы координат относительно двух точек
Допустим что у меня есть сетка координат и 2 ключевые точки, при смещении этих двух ключевых точек, сетка координат должна смещаться относительно этих точек, причём нужно учесть не только смещение по координатам но и поворот каждой точки в сетке относительно двух ключевых. То есть если ключевые точки смещаются не на одинаковое расстояние и между ними возникает наклон, каждая точка в сетке должна учесть этот наклон и так же наклониться. Какие есть инструменты для удобной манипуляции сеткой, что бы не приходилось прописывать всё самому?
Ответы (1 шт):
При отсутствии масштабирования матрицу аффинного преобразования можно рассчитать так:
имеем начальные точки (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] на неё)