Найти количество градусов, чтобы повернуть? - PullRequest
1 голос
/ 02 августа 2011

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

Вот мой код:

public void rotate(double x, double y) {
    rotateRight(Math.toDegrees(Math.atan2((x - getX()), (y - getY()))));
}

x и y - указанная точка, а getX () и getY () - текущая точка объекта, поэтому я пытаюсь найти количество градусов, на которые должен повернуть объект вправо, чтобы он смотрел в указанную точку.

Кто-нибудь может порекомендовать надежный способ сделать это?

Ответы [ 4 ]

1 голос
/ 02 августа 2011

Это зависит от того, какие единицы вы используете.Лично в радианах у меня есть эта функция в моих фрагментах.

public static double getAngleBetween(double x1, double y1, double x2, double y2)
{
      return(Math.atan2(y1-y2, x1-x2));
}

, что приводит к углу (в радианах) между любыми двумя абстрактными точками.

1 голос
/ 02 августа 2011

Ваше наименование немного сбивает с толку, поэтому я делаю некоторые предположения здесь. Ваш «объект» находится в начале координат (0,0), а getX () и getY () возвращают точку, с которой объект в данный момент сталкивается, и вы хотите, чтобы объект смотрел на новую точку.

Отсюда - простой триг и арифметика. Прежде всего, нужно выяснить ваш текущий угол:

current_angle=atan(getX()/getY())

Ваш новый угол будет

new_angle=atan(newX/newY)

и угол, на который нужно повернуться, естественно,

rotation_angle=new_angle - current_angle
1 голос
/ 02 августа 2011

Вам нужно матричное преобразование , чтобы сделать это правильно.

0 голосов
/ 02 августа 2011

Угол, возвращаемый Math.atan2(), является абсолютным.Для того, чтобы превратить его в относительное вращение, вам сначала нужно узнать текущий угол, а затем вычесть оба.

...