Предположим, у вас есть фигура, и вы хотите повернуть ее на угол alpha
и перевести ее так, чтобы точка (cx, cy)
фигуры после преобразования превратилась в (sx, sy)
.
Преобразование
transformed_x = x*cos(alpha) - y*sin(alpha) + offset_x
transformed_y = x*sin(alpha) + y*cos(alpha) + offset_y
для вычисления желаемых значений offset_x
и offset_y
, вам просто нужно поместить ваше требование о (cx, cy)
и (sx, sy)
в вышеприведенные уравнения:
sx = cx*cos(alpha) - cy*sin(alpha) + offset_x
sy = cx*sin(alpha) + cy*cos(alpha) + offset_y
и теперь вы можете легко извлечь значения смещения из этого:
offset_x = sx - cx*cos(alpha) + cy*sin(alpha)
offset_y = sy - cx*sin(alpha) - cy*cos(alpha)
Чтобы настроить для него преобразование canvas, достаточно просто позвонить
context.translate(sx - cx*Math.cos(alpha) + cy*Math.sin(alpha),
sy - cx*Math.sin(alpha) - cy*Math.cos(alpha));
context.rotate(alpha);
Вы можете увидеть небольшую демонстрацию этой формулы по этой ссылке .