Java:确定两点之间的角度

时间:2015-03-25 14:55:36

标签: java math angle degrees atan2

好的,首先道歉,因为我知道这种问题不止一次被提出过。然而,即使在查看了其他问题和答案之后,我也无法让这个问题适用于我的情况。请参阅下面的示例: 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,它应该是45?然而,并不是简单的情况我不会想到它返回否定结果,例如,如果我将P1更改为300,300(低于P2),则角度应为0,但返回为-90。

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

3 个答案:

答案 0 :(得分:5)

atan2(Y,X)在标准笛卡尔坐标系中计算逆时针正方向点(X,Y)对光线通过(1,0)的角度。这意味着X是沿着零角度射线的坐标,在您的情况X=-difY中,Y是(小)正角度方向上的坐标,这给出了您对所描绘角度的偏好为45°,Y=difX。因此

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

答案 1 :(得分:3)

您对几何中使用的坐标系与计算机屏幕上使用的坐标系混淆。在几何中,您经常会看到0,0是左下角的一个点。但是屏幕上的0,0左上角。

现在,根据屏幕坐标旋转图片,看看角度是否正确计算。

因此,在一般情况下,您可以选择以下解决方案之一: 1.重新计算你的积分的corrdinates屏幕协调和返回。 2.如果您的问题仅在角度,您可以在结果中添加π/ 2(90度)。

答案 2 :(得分:1)

使用您的第double difX = p2.x - p1.x; double difY = p2.y - p1.y;行,您正在计算从p2到0的角度,因此-45是正确的答案。尝试用p2反转p1。

此外,如果P1更改为300,300,则角度为0(0到P1,P1到P2)。如果从P2到0或0到P2,角度确实是90或-90。

相关问题