Найти угол между двумя векторами (с учетом знака) - 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, в градусах
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д