2013-02-13 2 views
2

Я делаю игру, где у вас есть спрайт, который стреляет в пули в направлении мыши. Пока что он отлично работает с 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-угол в градусы, и наоборот.

Заранее благодарен!

+2

SOHCAHTOA, детка! –

ответ

3

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

Вот Javadocs на классе Math.

+0

'Math.tan()' возвращает двойной, правильно? Как преобразовать это в X и Y? – user2029675

+0

Если вам нужно преобразовать его в X и Y, вместо использования Math.tan, используйте Math.cos (скорректированный Radians), чтобы получить значение X и Math.sin (adjustRadians), чтобы получить значение Y, которое даст вы a (X, Y) для нормированного вектора. – rgettman

+0

Похоже, он работает! Спасибо! – user2029675

0

Использование Math.atan2(), и помните, что результат в радианах , а не в градусов.

0

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

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

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