как получить скорость x и y из угла и скорости?

#java #vector

#java #вектор

Вопрос:

Я нашел несколько ответов на этот вопрос, но ни один из них не сработал для меня. Происходит что-то вроде этого:

 velocityX = (int) (velocity*Math.cos(angle));
velocityY = (int) (velocity*Math.sin(angle));
        
posX  = velocityX;
posY  = velocityY;
  

У меня это не работает, угол 0 перемещает его прямо вправо, каждые 90 градусов больше угла изменяет угол объекта на 45 градусов против часовой стрелки. Может быть, это потому, что центр моего экрана равен 0, 0, а не обычный верхний левый — 0, 0? Или есть что-то еще, что я делаю неправильно?

Комментарии:

1. Вы измеряете угол в градусах или радианах? Методы в Math классе требуют аргументов в радианах.

Ответ №1:

В Java тригонометрические функции, такие как Math.sin и Math.cos , принимают аргумент в радианах.

Если входной угол измеряется в градусах, его можно преобразовать в радианы с помощью Math.toRadians вспомогательной функции:

 velocityX = (int) (velocity*Math.cos(Math.toRadians(angle)));
velocityY = (int) (velocity*Math.sin(Math.toRadians(angle)));
  

Также можно определить константу и использовать ее для преобразования градусов в радианы:

 public static final double TO_RAD = Math.PI / 180;

//...

velocityX = (int) (velocity*Math.cos(angle * TO_RAD));
velocityY = (int) (velocity*Math.sin(angle * TO_RAD));