找到两点之间的角度时出错

时间:2014-01-02 03:56:23

标签: java swing angle mouselistener mousemotionevent

这个问题很难解释,所以我会用图像来帮助我:

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

我正试图找到坦克中间和鼠标之间的角度。橙色圆点表示鼠标位置,红色线表示两个实例,绿色/石灰线表示坦克的炮塔角度。我一直在查看堆栈溢出多次,但无济于事我找到了解决问题的方法。我甚至用Google搜索了。在两者中,我发现了许多代码组来“找到一个角度”。我确信这些工作,所以我怀疑我的问题在于糟糕的代码。我 GUESSING 在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 个答案:

答案 0 :(得分:0)

好吧,经过大量的谷歌搜索,我发现确实没有错误。所有代码都是正确的,所有......几乎一切都是正确的。唯一错误的是它偏离了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;
}

出于某种原因,我觉得我只是因为多次忽略而忽略了几个智商点。