Найти угол между двумя векторами (с учетом знака) - C#
Формулировка задачи:
Всем доброго времени суток
Пишу игру, в процессе пользуясь векторной алгеброй (это упрощает многие расчеты).
Встала задача нахождения угла между двумя векторами. Однако, есть одно условие - я хочу, чтобы угол, откладываемый по часовой стрелке, считался положительным, а против - отрицательным.
Для наглядности приведу всё с кусками кода:
Есть класс вектора
где Point (очевидно) - простенькая структурка типа:
Необходимо найти угол между двумя векторами типа GVector2, но с таким условием: пусть если "направление" этого угла по часовой стрелке, угол будет положительным, если против - отрицательным.
Найти угол между векторами А и В - формула, предложенная здесь, даст мне только численное значение косинуса угла, что даст голую величину.
Теоритически, проблему можно решить множеством:
Что, как мне кажется, не лучшее решение.
Буду благодарен за любую подсказку.
Да, если суть вопроса не понятна - отпишите, я попробую объяснить более подробно.
class GVector2
{
public Point StartPoint;
public Point EndPoint;
}public struct Point
{
public float X;
public float Y;
}if(...)
...
else if(...)
// (повторить много раз)Решение задачи: «Найти угол между двумя векторами (с учетом знака)»
textual
Листинг программы
vec = B - A angle = atan2(vec.y, vec.x) // в радианах degrees = angle * (180/PI) // или angle * 57.295779513, в градусах