PDA

Просмотр полной версии : угол драга (drag)


$mival
25.07.2010, 16:04
нужно определить угол по которому драгнул юзер, например относительно горизонтали

то есть если ровно вправо - угол ноль,
влево - 180 и тд

есть вот такая формула
a = arctg[(y2 - y1)/(x2 - x1)] - arctg[(y4 - y3)/(x4 - x3)]

где а - нужный нам угол (в радианах?)
х1, у1 ... координаты соответствующих точек
точки 3 и 4 это координаты условного горизонтального отрезка от которого считаем угол

private function getDirectionByPoints(p0:Point, p1:Point):Number
{
var angle:Number = 0;

angle = Math.atan( (p1.y - p0.y) / (p1.x - p0.x) );

return angle * 180 / Math.PI;
}

собсна второй арктангенс при вычитании убивается, так как у нас считается относительно горизонтального отрезка, а у него у обоих точек одинаковые игрики, соответственно при делении - ноль, арктангенс нуля - ноль.

p0 у нас запоминается при нажатии на stage
p1 соответственно при отпускании кнопки

не пойму что я сделал не так, по идее должно выдавать в диапазоне от нуля до 180 градусов, но как то больше 90 не получается

что не так?

hartman
25.07.2010, 16:23
Посмотрите на область значений арктангенса, все станет понятно. http://ru.wikipedia.org/wiki/Арксеканс

rainbowrussia
25.07.2010, 17:16
Для таких целей есть функци atan2(y:Number, x:Number), которая определяет угол по двум координатам смещения. Во вложении пример использования.

$mival
25.07.2010, 19:27
Посмотрите на область значений арктангенса, все станет понятно. http://ru.wikipedia.org/wiki/Арксеканс

ну да, школьный курс :D

Для таких целей есть функци atan2(y:Number, x:Number), которая определяет угол по двум координатам смещения. Во вложении пример использования.

спасибо! пользуюсь