3点之间的角度

时间:2015-09-14 13:43:16

标签: java geometry

我走了网址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点之间的角度的正确方法。

2 个答案:

答案 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次来电。