Ошибка при поиске угла между двумя точками

Эту проблему сложно объяснить, поэтому я буду использовать изображение, чтобы помочь мне:

http://i39.tinypic.com/2rm4ntd.png

Я пытаюсь найти угол между серединой танка и мышью. Оранжевая точка обозначает положение мыши, красная линия разделяет два экземпляра, а зеленая / известковая линия показывает угол башни танка. Я несколько раз просматривал переполнение стека, но пока безрезультатно нашел решение своей проблемы. Я даже гуглил. В обоих я нашел много групп кода, чтобы "найти угол". Я уверен, что это работает, поэтому я сомневаюсь, что моя проблема заключается в плохом коде. Я угадываю, что ошибка найдена в MouseMotionListener.

Две точки, которые я использую для создания линии псевдо (НЕ зеленой или красной линии), являются средней точкой танка. new Point(Tank.getX() + 16, Tank.getY() + 16) (размер танков составляет 32x32) и точка мыши (устанавливается при появлении нового события перемещения мыши).

Подробности о моей программе:

  • Рамка создана и к ней прикреплен MouseMotionListener.
  • JPanel создается и добавляется в кадр.
  • Все нарисовано на JPanel.

Короче мой getAngle() код неправильный, мой MouseMotionListener неправильный, или я задаю неправильные параметры. В чем проблема?...

РЕДАКТИРОВАТЬ: Как просили в комментариях здесь мой код и вывод:

Код:

public static float getAngle(Point source, Point destination) {
  System.out.println(source + "\n" + destination);
  double xDiff = source.x - destination.x;
  double yDiff = source.y - destination.y;
  System.out.println((float) Math.toDegrees(Math.atan2(yDiff, xDiff)));
  return (float) Math.toDegrees(Math.atan2(yDiff, xDiff));
}

Выход:

java.awt.Point[x=116,y=116] // Source point
java.awt.Point[x=134,y=123] // Destination point
-158.7495

1 ответ

Решение

Ну, после долгих поисков, я обнаружил, что ошибки действительно не было. Весь код был правильным, все.. в значительной степени все было правильно. Единственной ошибкой было то, что она была отклонена на 90 градусов. Эта мысль приходила мне в голову несколько раз, но каждый раз, когда я смотрел на точку и линию, это просто казалось неправильным... Фиксированный код ниже:

public static float getAngle(Point source, Point destination) {
  System.out.println(source + "\n" + destination);
  double xDiff = source.x - destination.x;
  double yDiff = source.y - destination.y;
  System.out.println((float) Math.toDegrees(Math.atan2(yDiff, xDiff)));
  return (float) Math.toDegrees(Math.atan2(yDiff, xDiff)) + 90.0F;
}

По какой-то причине я чувствую, что только что потерял пару баллов IQ за пропуск этого многократного времени.

Другие вопросы по тегам