Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Угол между векторами со знаком. (http://www.flasher.ru/forum/showthread.php?t=150520)

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

Вложений: 1
Лучше через atan2, пример для мувиков на картинке внизу на AS2:
Код AS1/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);

Ну или компактнее:
Код AS1/AS2:

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, эта функция дает знак угла
, да нет. проверил, все работает..


Часовой пояс GMT +4, время: 12:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.