В общем, вы хотите сделать следующее:
- Преобразовать контекст в точку на холсте, вокруг которой должен вращаться объект.
- Повернуть контекст.
- Преобразование контекста по отрицательному смещению внутри объекта для центра вращения.
- Нарисуйте объект в 0,0.
В коде:
ctx.save();
ctx.translate( canvasRotationCenterX, canvasRotationCenterY );
ctx.rotate( rotationAmountInRadians );
ctx.translate( -objectRotationCenterX, -objectRotationCenterY );
ctx.drawImage( myImageOrCanvas, 0, 0 );
ctx.restore();
Вот рабочий пример , демонстрирующий это в действии.(Математика для поворота была только экспериментально взломана, чтобы найти величину колебания и смещение в радианах, которые соответствуют быстро набросанной шкале датчика.)
Как видно, вы можете заменить вызов translate
на шаг№ 3 выше со смещением на вызов drawImage()
.Например:
ctx.drawImage( myImageOrCanvas, -objectRotationCenterX, -objectRotationCenterY );
Рекомендуется использовать перевод контекста, если у вас есть несколько объектов для рисования в одном месте.