这个问题很难解释,所以我会用图像来帮助我:
error image http://i39.tinypic.com/2rm4ntd.png
我正试图找到坦克中间和鼠标之间的角度。橙色圆点表示鼠标位置,红色线表示两个实例,绿色/石灰线表示坦克的炮塔角度。我一直在查看堆栈溢出多次,但无济于事我找到了解决问题的方法。我甚至用Google搜索了。在两者中,我发现了许多代码组来“找到一个角度”。我确信这些工作,所以我怀疑我的问题在于糟糕的代码。我 GUESSING 在MouseMotionListener中发现错误。
我用来创建伪线(不是绿线或红线)的两点是坦克的中间点new Point(Tank.getX() + 16, Tank.getY() + 16)
(坦克大小是32x32)和鼠标点(在那里设置)是一个新的鼠标移动事件。)
有关我的计划的详细信息:
简而言之,我的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
答案 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;
}
出于某种原因,我觉得我只是因为多次忽略而忽略了几个智商点。