Нахождение угла со знаком между векторами

Как Вы нашли бы угловую тету со знаком от вектора к b?

И да, я знаю что тета = arccos ((a.b) / (|a || b |)).

Однако это не содержит знак (т.е. он не различает по часовой стрелке или против часовой стрелки вращение).

Мне нужно что-то, что может сказать мне минимальный угол для вращения от до b. Положительный знак указывает на вращение от +x-axis к +y-axis. С другой стороны знак минус указывает на вращение от +x-axis к - y-ось.

assert angle((1,0),(0,1)) == pi/2.
assert angle((0,1),(1,0)) == -pi/2.
27
задан Cerin 27 January 2010 в 20:34
поделиться

2 ответа

Если у вас есть функция ATAN2 () в вашей математической библиотеке выбора:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
33
ответ дан 28 November 2019 в 04:15
поделиться

, Что вы хотите использовать, часто называют “скалярным произведением преступника”, то есть, найдите векторный перпендикуляр к одному из векторов и затем найдите скалярное произведение с другим вектором.

if(a.x*b.y - a.y*b.x < 0)
    angle = -angle;

можно также сделать это:

angle = atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y );
53
ответ дан 28 November 2019 в 04:15
поделиться