我走了网址https://math.stackexchange.com/questions/361412/finding-the-angle-between-three-points 并写了一个简单的代码如下。不知道我该如何测试它。
double x1 = 2, x2 = 3, x3= 4;
double y1 = 200, y2 = 215, y3= 225;
double l1x = x2 - x1;
double l1y = y2 - y1;
double l1xSQR = l1x * l1x;
double l1ySQR = l1y * l1y;
double l1SQRT = Math.sqrt(l1xSQR + l1ySQR);
double l2x = x3 - x2;
double l2y = y3 - y2;
double l2xSQR = l2x * l2x;
double l2ySQR = l2y * l2y;
double l2SQRT = Math.sqrt(l2xSQR + l2ySQR);
System.out.println(Math.abs(Math.cos(((l1x * l2x) + (l1y * l2y))/(l1SQRT*l2SQRT))));
这是在2D中找到3点之间的角度的正确方法。
答案 0 :(得分:0)
表达式
((l1x * l2x) + (l1y * l2y))/(l1SQRT*l2SQRT)
已经是所需角度的余弦,所以你应该写
Math.acos(((l1x * l2x) + (l1y * l2y))/(l1SQRT*l2SQRT))
获得弧度的角度。或
Math.acos(((l1x * l2x) + (l1y * l2y))/(l1SQRT*l2SQRT)) * 180.0 / Math.PI
如果你需要学位。
答案 1 :(得分:0)
在准确性和使用普遍性方面可以更好
atan2(D20x * D10y - D20y * D10x, D20x * D10x + D20y * D10y).
另外
atan2(D20y, D20x) - atan2(D10y, D10x),
需要两次atan
次来电。