В 2D-контексте
canvas есть функция rotate, работа которой ставит в тупик многих, кто пытается ей воспользоваться. Объекты, отрисованные после вызова этой функции, поворачиваются на указанный в ней угол. Однако есть одна сложность: вращение выполняется не относительно центра объекта, как в CSS, а относительно начала координат всего холста.То есть, если отрисовать прямоугольник в центре холста, то опорной точкой вращения будет верхний левый угол всего canvas-а.
Чтобы выполнить вращение вокруг нужной точки, нужно сместить к ней начало координат с помощью функции
translate и разместить новый объект с соответствующим сдвигом:context.translate(originX, originY);
context.rotate(angle);
context.fillRect(x - originX, y - originY, width, height);
Пример с вращением прямоугольника относительно его центра:
codepen.io/OlegChulakovStudio/pen/NMxMzv