Как Вы нашли бы угловую тету со знаком от вектора к 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.
Если у вас есть функция ATAN2 () в вашей математической библиотеке выбора:
signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
, Что вы хотите использовать, часто называют “скалярным произведением преступника”, то есть, найдите векторный перпендикуляр к одному из векторов и затем найдите скалярное произведение с другим вектором.
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 );