#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));