Код AS3:
package
{
import flash.geom.Point;
import flash.display.DisplayObject;
/* * * * * * * * * *
* *
* @author wolsh *
* *
\* * * * * * * * * */
public function pointRotate(object:DisplayObject, center:Point, angle:Number) : void
{
// return to zero
angle += object.rotation;
var a0:Number = - object.rotation * Math.PI / 180;
var s0:Number = Math.sin(a0);
var c0:Number = Math.cos(a0);
var dX0:Number = object.x - center.x;
var dY0:Number = object.y - center.y;
object.rotation = 0;
object.x = Math.round(center.x + dX0 * c0 - dY0 * s0);
object.y = Math.round(center.y + dX0 * s0 + dY0 * c0);
// new rotation
var r:Number = angle * Math.PI / 180;
var s:Number = Math.sin(r);
var c:Number = Math.cos(r);
var dX:Number = object.x - center.x;
var dY:Number = object.y - center.y;
object.rotation += angle;
object.x = center.x + dX * c - dY * s;
object.y = center.y + dX * s + dY * c;
}
}
Во вложении тестовая свфка просто.
Можно кликать и ставить точку, вокруг которой прямоугольник крутится.
Черная точка ставится в стейдже, а белая - внутри самого прямоугольника, чтобы наблюдать люфт.