PDA

Просмотр полной версии : Угол между векторами со знаком.


cpu
13.02.2011, 08:48
Как получить угол между векторами со знаком? Т.е по правую руку, или по левую..

Добавлено через 41 минуту
Решил через определитель матрицы.
Сам угол получаю так: cos = (x1*x2 + y1*y2) / sqrt ((x1*x1 + y1*y1) * (x2*x2 + y2*y2))

Направление через знак определителя матрицы:
|x1 y1|
|x2 y2|
Если "минус", то по левую руку, если "плюс" то по правую...

mooncar
13.02.2011, 10:23
Лучше через atan2, пример для мувиков на картинке внизу на AS2:
var delt_x1:Number = m1._x - m0._x ;
var delt_y1:Number = m0._y - m1._y ;

var delt_x2:Number = m2._x - m0._x ;
var delt_y2:Number = m0._y - m2._y ;

var angle1:Number = Math.atan2(delt_x1, delt_y1) * 180 / Math.PI ;
var angle2:Number = Math.atan2(delt_x2, delt_y2) * 180 / Math.PI ;

trace('angle1: ' + angle1);
trace('angle2: ' + angle2);

var angleDelta:Number = angle1 - angle2;

trace('Угол со знаком м/у вектором (m0, m1) и (m0, m2): ' + angleDelta);


Ну или компактнее:
var angleDelta:Number = (Math.atan2(m1._x - m0._x, m0._y - m1._y) - Math.atan2(m2._x - m0._x, m0._y - m2._y)) * 180 / Math.PI
trace('Угол со знаком м/у вектором (m0, m1) и (m0, m2): ' + angleDelta);

Взято положение мувиков, чтобы не брать цифры с потолка для примера.
Для угла м/у вектором (m0, m1) и (m0, m2) примера будет -70.7139673432521 градусов.

Правда, возможно я ошибся, тригоном. задачки давно решал. Тем не менее смотрите в сторону Math.atan2, эта функция дает знак угла.

cpu
13.02.2011, 10:31
Правда, возможно я ошибся, тригоном. задачки давно решал. Тем не менее смотрите в сторону Math.atan2, эта функция дает знак угла, да нет. проверил, все работает..