1

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

错误图像

我正在尝试在水箱中间与鼠标之间找到一个角度。橙色点表示鼠标位置,红线将两个实例分开,绿色/石灰线表示坦克的炮塔角度。我已经多次查看堆栈溢出,但无济于事,我找到了解决问题的方法。我什至用谷歌搜索过。在这两种情况下,我都找到了很多组代码来“寻找角度”。我确信这些工作,所以我怀疑我的问题出在糟糕的代码手中。我这个错误是在 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
4

1 回答 1

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;
}

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

于 2014-01-02T14:45:25.113 回答