Показать сообщение отдельно
Старый 08.02.2009, 01:38
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 2  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
ну вникать мне лень, до минимума сведите код, до такого на каком вы можете предсказать что будет дальше, а уже потом развивайте код. Вполне возможно все дело в функции 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;
}
еще возможно стоит запоминать предыдущий угол на который поворачивали и прежде чем применять матрицу трансформации делать поправку.


Последний раз редактировалось ramshteks; 08.02.2009 в 10:04.