【发布时间】:2012-04-15 18:00:41
【问题描述】:
我需要为自己的 Point 类计算两点之间的角度,点 a 应为中心点。
方法:
public float getAngle(Point target) {
return (float) Math.toDegrees(Math.atan2(target.x - x, target.y - y));
}
测试 1: // 返回 45
Point a = new Point(0, 0);
System.out.println(a.getAngle(new Point(1, 1)));
测试 2:// 返回 -90,预期:270
Point a = new Point(0, 0);
System.out.println(a.getAngle(new Point(-1, 0)));
如何将返回的结果转换为 0 到 359 之间的数字?
【问题讨论】:
-
刚刚注意到atan2的参数顺序相反:必须是atan2(y, x)
-
我不知道出了什么问题,但是我的订单可以正常工作,相反的顺序不会。
-
只能测量三点之间的角度。您可能会认为
(0, 0)或(min(x1,x2), min(y1,y2))是其中一个点,但您不能在两点之间画一个角度。 -
@Peter Lawrey Point a 代表中心。所以我的意思是中心点和线a到新点(x,y)的角度。还是没有这个意义?
-
所以你的意思是
(0, 0)到(1, 0)和(0,0)到(x, y)之间的角度?