rotateAndCache = function(image, angle) {
var offscreenCanvas = document.createElement('canvas');
var offscreenCtx = offscreenCanvas.getContext('2d');
offscreenCanvas.width = image.height;
offscreenCanvas.height = image.width;
offscreenCtx.translate(offscreenCanvas.width / 2, offscreenCanvas.height / 2);
offscreenCtx.rotate(angle * Math.PI / 180);
offscreenCtx.drawImage(image, -(image.width / 2), -(image.height / 2));
return offscreenCanvas;
}
newX = obj.x * Math.cos(a) - obj.y * Math.sin(a);
newY = obj.x * Math.sin(a) + obj.y * Math.cos(a);
ctx.save(); // запомнили текущее состояние канваса
ctx.rotate(rad); // повернули канвас целиком
// рисуем, заливаем и вообще делаем что хотим с повёрнутым канвасом
ctx.restore(); // восстанавливаем состояние, которое запомнили ранее (читай повернули листик назад как было)