Как преобразовать наклон в градусы и наоборот?

Я делаю игру, в которой у вас есть спрайт, который стреляет пулями в направлении мыши. Пока с 1 пулей работает нормально. У меня есть этот метод, который получает наклон, а затем нормализует вектор:

    public static Vector2f getSimplifiedSlope(Vector2f v1, Vector2f v2) {
    Vector2f result = new Vector2f(v2.x - v1.x, v2.y - v1.y);
    float length = (float)Math.sqrt(result.x * result.x + result.y * result.y);

    return new Vector2f(result.x / length, result.y / length);
}

Однако сейчас я делаю дробовик, стреляющий несколькими пулями, с «разбросом». Мой план таков: я возьму базовый наклон, преобразую его в градусы, добавлю или вычту пару, чтобы создать отклонение, затем преобразую градусы обратно в наклон и передам его пуле.

Однако я не знаю, как это сделать. Было бы здорово, если бы кто-нибудь показал мне, как преобразовать наклон 2D в градусы и наоборот.

Заранее спасибо!


person user2029675    schedule 13.02.2013    source источник


Ответы (3)


Самый простой способ — использовать метод тригонометрии Math.atan2 для вычисления угла в радианах, преобразовать его в градусы с помощью Math.toDegrees, выполнить корректировку, преобразовать его обратно в радианы с помощью Math.toRadians, затем использовать метод тригонометрии Math.tan для преобразования значения в радианах обратно в склон. Вы должны следить за потенциально бесконечным наклоном, возвращающимся из метода tan.

Вот Javadocs для класса Math.

person rgettman    schedule 13.02.2013
comment
Math.tan() возвращает двойной, верно? Как преобразовать это в X и Y? - person user2029675; 13.02.2013
comment
Если вам нужно преобразовать его в X и Y, вместо использования Math.tan используйте Math.cos(adjustedRadians), чтобы получить значение X, и Math.sin(adjustedRadians), чтобы получить значение Y, что даст вам a (X, Y) для нормализованного вектора. - person rgettman; 13.02.2013


Math.atan2( ) сделает это и даст вам результат в радианах.

Возвращает угол тета из преобразования прямоугольных координат (x, y) в полярные координаты (r, тета). Этот метод вычисляет фазу тета, вычисляя арктангенс y/x в диапазоне от -pi до pi.

Math.toDegrees() выполнит преобразование радиан/градус.

person Brian Agnew    schedule 13.02.2013