У меня есть два вектора в игре.Один вектор - игрок, один вектор - объект.У меня также есть вектор, который указывает направление, на которое игрок смотрит.Вектор направления не имеет z-части.Это точка с величиной 1, расположенная где-то вокруг начала координат.
Я хочу вычислить угол между направлением, в котором сейчас находится солдат, и объектом, поэтому я могу правильно панорамировать звук (только стерео).
Диаграмма ниже описывает мою проблему.Я хочу рассчитать угол между двумя пунктирными линиями.Одна пунктирная линия соединяет игрока и объект, а другая - линию, представляющую направление, в котором находится игрок, с точки, в которой находится игрок.
В данный моментЯ делаю это (предположим, что игрок, объект и направление - это все векторы с 3 точками, x, y и z):
Vector3d v1 = direction;
Vector3d v2 = object - player;
v1.normalise();
v2.normalise();
float angle = acos(dotProduct(v1, v2));
Но, похоже, это дает неверные результаты.Любой совет?
Проверка кода:
Vector3d soldier = Vector3d(1.f, 1.f, 0.f);
Vector3d object = Vector3d(1.f, -1.f, 0.f);
Vector3d dir = Vector3d(1.f, 0.f, 0.f);
Vector3d v1 = dir;
Vector3d v2 = object - soldier;
long steps = 360;
for (long step = 0; step < steps; step++) {
float rad = (float)step * (M_PI / 180.f);
v1.x = cosf(rad);
v1.y = sinf(rad);
v1.normalise();
float dx = dotProduct(v2, v1);
float dy = dotProduct(v2, soldier);
float vangle = atan2(dx, dy);
}