public double GetPitchToFace(double Z2, double Z1, double X2, double X1)
{
double Arc;
Arc = Math.Atan2(Z2 - Z1, X2 - X1);
return Arc;
}
Я пытаюсь выработать правильную подачу, чтобы «смотреть» в конкретную точку.
Использование Atan2 (как показано выше), кажется, возвращает правильные значения, однако в игре система высоты тона работает довольно странно.
Вместо увеличения против часовой стрелки от 0 радиан до 6,2, оно начинается с 0 до 3 радиан, затем прыгает вниз до -3 радиан и снова возвращается к 0.
Надеюсь, вы понимаете приведенный выше пример плохого рисования.
Мне нужен способ преобразования из этой странной системы шаг/радиан в стандартную 0-6,2 радиан, чтобы вернуть правильный шаг.
Спасибо.





Поскольку метод Math.Atan2 возвращает угол θ (в радианах), такой что -π ≤ θ ≤ π, он будет давать отрицательные значения, когда точка ввода находится в третьем или четвертом квадранте.
Чтобы вернуть только положительные значения (например, 0 ≤ θ ≤ 2π), можно использовать простую математику. Поскольку 2π — это полное вращение, вы можете добавить его всякий раз, когда метод Math.Atan2 возвращает отрицательное значение. Это даст вам только значения в желаемом диапазоне.
public double GetPitchToFace(double Z2, double Z1, double X2, double X1)
{
double Arc;
double theta = Math.Atan2(Z2 - Z1, X2 - X1);
Arc = (theta >= 0) ? theta : (2*Math.PI + theta);
return Arc;
}
Спасибо, я не уверен, почему я никогда не думал об этом. Теперь я вижу, что моя проблема немного углубляется, я обнаружил, что часто возвращаю обратный угол. В идеальном мире у меня был бы шаг между 90 и 270 градусами, так как мне нужно только наклонить вверх или вниз к точке. Тем не менее, я вижу, что он возвращает 300 ++, что в основном приводит к тому, что игрок/объект переворачивается вверх ногами.