среда, сентября 05, 2007

Вращение клипа относительно заданной точки

Задача: перенести клип на некоторое расстояние, чтобы некая его точка оказалась в (0,0)
И повернуть его на угол rotation.

this._x=-anchor._x;
this._y=-anchor._y;

var _matrix:Matrix = new Matrix();
_matrix.translate(0,0);
_matrix.rotate(Math.PI*(rotation)/180);
_matrix.translate(0,0);
var tmpMatrix:Matrix = this.transform.matrix;
tmpMatrix.concat(_matrix);
this.transform.matrix = tmpMatrix;

При таком раскладе всё получается.

Однако, хотя клип повернулся, на угол наклона _rotation это никакого влияния не оказало он остался =0... А у меня цель - рассчитать новые значения _x, _y при заданным _rotation, чтобы потом организовать плавное стремление к ним.

Ищем другой способ.

Используя обычную арифметику окружности, получаем:

var r:Number=Math.sqrt(this._x*this._x+this._y*this._y);
var a_x:Number=Math.acos(this._x/r);
var a_y:Number=Math.asin(this._y/r);
this._rotation=rotation;
this._x=r*Math.cos(a_x-(Math.PI*(rotation)/180));
this._y=r*Math.sin(a_y-(Math.PI*(rotation)/180));

Тяжеловато (много вычислений и такое чувство что надо это делать как-то проще), но работает!

Комментариев нет: