Как узнать угол между вектором взгляда и точкой, используя любой язык?

Разрабатываю игру. Появилась необходимость найти угол между вектором направления взгляда персонажа и центром объекта, но не понимаю как это сделать.

Ниже приведу схему (вид сверху) для наглядности вопроса:

a - вектор направления взгляда
B - точка, центр объекта, к которому надо найти угол
c - вектор a, повернутый на необходимый градус
α - угол, необходимый для поворота вектора a так, чтобы он смотрел на B

Известны позиции: вектора a, точки B. Еще известен угол поворота вектора a вокруг своей оси.

Проблема возникает из-за того что я не знаю длину вектора a, здесь он нарисован просто для визуализации проблемы.

Схема


Ответы (1 шт):

Автор решения: Volk

Вариант такой: у вас есть вектора а. Есть вектор b - он имеет начало в точке стояния вашего героя (точка глаз) и конец этого вектора в точке B.
Посчитаем, что система координат у вас новая, местная... и точка стояния вашего героя это нулевые координаты, так проще. есть теорема, что скалярное произведение векторов: a·b = x1*x2 + y1*y2 + z1*z2. a (x1, y1, z1) - вектор, b (x2, y2 ,z2) - вектор. alpha - угол между двумя векторами. cos(alpha) = (x1*x2 + y1*y2 + z1*z2) / (|a|*|b|). Где |a| и |b| - длины векторов. Длина вектора равна квадратному корню из (x^2 + y^2 + z^2).

→ Ссылка