Поэтому в другом вопросе мне сказали, что вы можете использовать упрощенную формулу точечного произведения, чтобы найти угол между двумя векторами:
angle = atan2(mouseY, mouseX) - atan2(yPos, xPos); //xPos, yPos is position of player
Кроме того, из того, что я понял, он просто берет точки как векторы. Вот почему позиция мыши и игрока подключена к параметрам. Однако, когда я перемещаю мышь вокруг игрока в радиусе 360 градусов, угол и, следовательно, вращение проигрывателя - это значение от -0.3... до -1.4... Это неверно метод? Я должен представлять векторы не как позиции X, Y, а как что-то еще?
Там также была найдена другая формула, которая также не работает для меня:
angle = atan2(mouseY - yPos, mouseX - xPos);
Первый метод правильный, второй - неправильный. Функция atan2(x,y)
вычисляет угол в радианах вектора, указывающего от (0,0)
до (x,y)
относительно оси x. Таким образом, правильно рассчитать два угла (в радианах) векторы имеют отношение к оси х, а затем вычесть их друг из друга, чтобы получить углы между этими двумя векторами.
Результатом функции atan2
является значение в полуоткрытом интервале (-pi,pi]
выраженное в градусах, это соответствует (-180°,180°)
. 0 °, таким образом, обозначает вектор, указывающий вправо (вдоль ось х), 90 ° - вектор, направленный вверх, 180 ° вектор, указывающий влево, и -90 ° вектор, указывающий вниз.
Вы можете преобразовать результат в радианах в углы по формуле
atan(x,y)*180/pi
Итак, если вы хотите преобразовать полученные результирующие значения в углы, просто умножьте их на 180/pi
.
atan2(mouseY, mouseX) - atan2(yPos, xPos);
Кроме того, вы должны спросить себя, где находится источник вашей системы координат, и соответствующим образом изменить свой ввод. Итак, где на вашем мониторе находится точка (0,0)?