Угол, в какую сторону повернуть - PullRequest
2 голосов
/ 08 января 2012

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

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 08 января 2012

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

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

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

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

1 голос
/ 08 января 2012

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

...