你如何计算一个物体与另一个物体之间的角度?
如何计算一个物体与另一个物体之间的角度,假定您的第一个物体是您的原点,向上的矢量是?我在android和java中遇到了大约六个小时的这个问题,并且没有任何真正的问题或者答案给出了正确的计算方法。你如何计算一个物体与另一个物体之间的角度?
如果问题不是很清楚: 我在屏幕上有一个对象,我想知道从这个对象到屏幕上另一个对象的y轴(或90度)是什么角度。所以如果第一个物体在1,1和第二个物体在2,2,那么角度应该是315.这是因为0度在右边,90度在上面(y轴),180度左边,270度下降。
可能有更优雅的解决方案,但我发现这工作得很好:
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上测试过。
答案是使用dot product,从而:
theta = arccos(a.b/(||a|| ||b||))
.
其中表示点积,并|| ||
表示向量幅度。
所以在你的情况下,你选择a
代表“up”(所以可能(0,0,1)
)和b
是你的两点之间的差异。
在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
这是2D格式。 3D呢? – 2012-03-09 20:59:17
关闭,但它没有出现正确答案,0度向右90度向上,180度向左和270度向下。它给出了这个反过来,这是没有用的。它也给出了从-180到+180的答案(当转换为度数时)。 – Lokiare 2012-03-09 21:01:02
确实如此。它按照上述文档中的规定返回它。如果结果低于0,则从360中减去结果。这应该给你你需要的东西。 – 2012-03-09 21:55:02
你可以试试数学堆栈交换站点。 – AHungerArtist 2012-03-09 20:44:00
[叹气]我想你想'arctan',但你的问题很不清楚。 – Beta 2012-03-09 20:45:59
这是题外话题。但答案是[* dot product *](http://en.wikipedia.org/wiki/Dot_product#Geometric_interpretation)。, – 2012-03-09 20:46:04