Найти угол между двумя векторами (с учетом знака) - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток Пишу игру, в процессе пользуясь векторной алгеброй (это упрощает многие расчеты). Встала задача нахождения угла между двумя векторами. Однако, есть одно условие - я хочу, чтобы угол, откладываемый по часовой стрелке, считался положительным, а против - отрицательным. Для наглядности приведу всё с кусками кода: Есть класс вектора
class GVector2
{
     public Point StartPoint;
     public Point EndPoint;
}
где Point (очевидно) - простенькая структурка типа:
public struct Point
{
     public float X;
     public float Y;
}
Необходимо найти угол между двумя векторами типа GVector2, но с таким условием: пусть если "направление" этого угла по часовой стрелке, угол будет положительным, если против - отрицательным. Найти угол между векторами А и В - формула, предложенная здесь, даст мне только численное значение косинуса угла, что даст голую величину. Теоритически, проблему можно решить множеством:
if(...)
     ...
else if(...)
// (повторить много раз)
Что, как мне кажется, не лучшее решение. Буду благодарен за любую подсказку. Да, если суть вопроса не понятна - отпишите, я попробую объяснить более подробно.

Решение задачи: «Найти угол между двумя векторами (с учетом знака)»

textual
Листинг программы
vec = B - A
angle = atan2(vec.y, vec.x) // в радианах
degrees = angle * (180/PI) // или angle * 57.295779513, в градусах

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы