有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数学Java:确定两点之间的角度

好的,首先道歉,因为我知道这种问题之前已经被问过不止一次了。然而,即使在看了其他的问题和答案之后,我仍然无法让它适用于我的情况。请参见下面的示例: Fig. 1

我只是想算出P1和P2之间的角度,假设0度如上图所示,这样我就可以在2之间指向正确的方向。所以我做了这样的事

Point p1 = new Point(200,300); Point p2 = new Point(300,200);
double difX = p2.x - p1.x; double difY = p2.y - p1.y;
double rotAng = Math.toDegrees(Math.atan2(difY,difX));

结果是:-45,应该在哪里?然而,这不仅仅是一种情况,我认为它不会返回一个负结果,例如,如果我将P1更改为300300(低于P2),那么角度应该是0,但返回为-90

所以我只是想知道,是否有人能指出我计算这个的错误,或者甚至有可能这样做


共 (2) 个答案

  1. # 1 楼答案

    用你的线double difX = p2.x - p1.x; double difY = p2.y - p1.y;,你在计算从p2到0的角度,所以-45是正确的答案。尝试用p2反转p1

    此外,如果P1更改为300300,则角度为0(0到P1和P1到P2)。角度实际上是90或-90,这取决于你是从P2到0还是从0到P2

  2. # 2 楼答案

    atan2(Y,X)在标准笛卡尔坐标系中以逆时针正方向计算点(X,Y)与穿过(1,0)的光线的角度。这意味着X是沿着零角射线的坐标,在你的情况下X=-difY,而Y是(小的)正角度方向的坐标,这使得,如果你喜欢描绘的角度是45°,Y=difX。因此

    double rotAng = Math.toDegrees(Math.atan2(difX,-difY));