Угол, в какую сторону повернуть

Для игры я пытаюсь вычислить угол между тем, куда я смотрю, и положением другого объекта на сцене. Я получил угол, используя следующий код:

Vec3 out_sub;
Math.Subtract(pEnt->vOrigin, pLocalEnt->vOrigin, out_sub);
float angle = Math.DotProductAcos(out_sub, vec3LookAt);

Этот код дает мне угол между тем, где я смотрю, и объектом на сцене. Но есть небольшая проблема.

Когда я смотрю не непосредственно на объект, а немного левее, он говорит, что мне нужно повернуть на 10 градусов, чтобы смотреть прямо на объект. Что совершенно правильно.

Но когда я смотрю немного вправо от объекта, он также говорит, что мне нужно повернуть на 10 градусов, чтобы смотреть прямо на объект.

Проблема здесь в том, что я не могу сказать, в какую сторону повернуть. Я знаю только его 10 градусов. Но нужно ли поворачивать влево или вправо? Вот что мне нужно выяснить.

Как я могу понять это?

2 ответа

Решение

Я чувствую необходимость уточнить ответ Игнасио...

В общем, ваш вопрос не обоснован, поскольку "повернуть налево" и "повернуть направо" имеют значение только после того, как вы решите, какой путь "вверх".

Перекрестное произведение двух векторов - это вектор, который говорит вам, какой путь "вверх". То есть, A x B это "вверх", который вы должны использовать, если вы хотите повернуть налево, чтобы получить от A в B, (А величина перекрестного произведения говорит вам, как далеко вы должны повернуть, более или менее...)

Для трехмерных векторов перекрестное произведение имеет аз-компоненту x1 * y2 - y1 * x2, Если сами векторы являются двумерными (т. Е. Имеют нулевые z-компоненты), то это единственное, что вам нужно вычислить, чтобы получить перекрестное произведение; компоненты x и y перекрестного произведения равны нулю. Так что в 2D, если это число положительное, то "вверх" - это положительное направление z, и вам нужно повернуть налево. Если это число отрицательно, то "вверх" - это отрицательное направление z, и вы должны повернуть налево, когда вверх ногами; то есть поверните направо.

Вам также необходимо выполнить перекрестное произведение на векторы. Затем вы можете получить направление вращения по направлению результирующего вектора.

Другие вопросы по тегам