Так что все, что вам действительно нужно, это функция, которая берет точку, начало координат (в данном случае центр вашего прямоугольника) и угол:
function rotatePoint(p, origin, angle) {
if (angle === 0) return p;
// make the origin essentially zero:
var px = p.x - origin.x;
var py = p.y - origin.y;
if (px == 0 && py == 0) return p;
var rad = angle * Math.PI / 180;
var cosine = Math.cos(rad);
var sine = Math.sin(rad);
p.x = cosine * px - sine * py;
p.y = sine * px + cosine * py;
// put the point back:
p.x += origin.x;
p.y += origin.y;
return p;
};
Итак, если вы хотите повернуть вершину на 10,10 на 45 градусов относительно центра, который (скажем) 20,20, вы должны сделать: rotatePoint({x:10, y:10}, {x:20, y:20}, 45)
даст вам (20, 5.85)
и т. Д.