2017-02-01 16 views
-1

Я работаю в GLSL и должен быстро и эффективно вычислять угол между двумя двумерными векторами.Расчет угла между двумя векторами в GLSL

Учитывая два вектора vec2, например (30, 20) и (50, 50), мне нужно рассчитать угол между ними.

настоящее время я использую

acos(dot(vector1, vector2)); 

Хотя это, кажется, не будет давать мне угол правильно. Я что-то делаю неправильно, или это правильная функция для использования?

ответ

7

Векторный точечный продукт будет вычислять косинус угла между двумя векторами, scaled by the length of both vectors. Если вы хотите получить только угол, вы должны нормализовать оба вектора, прежде чем делать точечный продукт.

+0

Как я и подозревал - простая ошибка, приветствие для исправления. – Mapboy

1

одна Скалярное произведение даст вам некоторые очень грубую информацию о угол между двумя векторами, даже если они не являются единичными векторами:

  • Если скалярное произведение равно 0, векторы 90 градусов друг от друга (ортогональный или перпендикулярный).
  • Если точка-произведение меньше 0, векторы находятся на расстоянии более 90 градусов друг от друга.
  • Если точечный продукт больше 0, то векторы находятся на расстоянии менее 90 градусов друг от друга.
+0

Это очень полезно! –