ну вникать мне лень, до минимума сведите код, до такого на каком вы можете предсказать что будет дальше, а уже потом развивайте код. Вполне возможно все дело в функции atan, я в свое время писал нечто похожее, суть в том что он не найдет именно тот угол который вы ищите, я так думаю, проследите верно ли находит. Возможно необходимо сделать поправку в зависимости от того где находится курсор, или что там у вас.
так вот как я находил, по теореме синусов, потом уже понял что мой подход нерационален, смотрите часть вделенную красным
Цитата:
public static function GetDistance(x_1:Number,y_1:Number,x_2:Number,y_2:Number):Number {
return Math.sqrt(Math.pow(x_1 - x_2,2) + Math.pow(y_1 - y_2,2));
}
public static function GetAngle(x_1:Number,y_1:Number,x_2:Number,y_2:Number):Number {
var angle:Number=Math.asin((y_1 - y_2)/GetDistance(x_1,y_1,x_2,y_2))*IN_DEG;
if (x_1<x_2) {
angle=180-angle;
} else if (y_1<y_2) {
angle=360+angle;
}
return angle;
}
|
еще возможно стоит запоминать предыдущий угол на который поворачивали и прежде чем применять матрицу трансформации делать поправку.