如何计算一个物体与另一个物体之间的角度?

时间:2012-03-09 20:42:23

标签: java android angle

如果你的第一个物体是你的原点并且向上矢量是,那么如何计算一个物体与另一个物体之间的角度?我在android和java中遇到了这个问题大约六个小时,并没有任何真正好的问题或答案给出了正确的计算方法。

如果问题不是很清楚: 我在屏幕上有一个对象,我想知道该对象的角度是什么,y轴(或90度)是屏幕上的另一个对象。因此,如果第一个对象是1,1而第二个对象是2,2,那么角度应该是315.这是因为0度是向右,90度是向上(y轴),还是180度,270度下降。

3 个答案:

答案 0 :(得分:1)

可能有更优雅的解决方案,但我发现这很有效:

float angle = (float)Math.toDegrees(Math.atan2((double)(y1 - y2),(double)(x1 - x2)));
angle = (angle + 180.0f) % 360.0f;
angle = 360.0f - angle;

这使得角度从0开始,90向上,180向左和向下270开始。我回答了我自己的问题,因为我花了一天多的时间才发现这个问题并且不在互联网上。我希望它对某人有帮助。我会在一两天内回答这个问题,看看是否有人能找到更优雅的解决方案或更好的方式来表达答案。这个答案是在java中,并已经在Android上测试过。

答案 1 :(得分:0)

答案是使用dot product,因此:

theta = arccos( a.b / (||a|| ||b||) )

其中.表示点积,|| ||表示矢量幅度。

因此,在您的情况下,您选择a代表“up”(可能(0,0,1)),b代表您的两点之间的差异。

答案 2 :(得分:0)

在Java中有一个名为Math.atan2()的函数。这需要一个“向量”。通常你有2个点,你需要计算它们之间的角度。这可以这样做:

Point p1 = new Point(2,6);
Point p2 = new Point(3,1);
double angle = Math.atan2(p2.y-p1.y,p2.x-p1.x);

Math.atan2以此处指定的格式返回结果:Math.atan2