将atan2值转换为标准的360度系统值

10
假设我正在使用 atan2 来获取两个向量之间的角度。 atan2 返回一个弧度值。我使用 Java 中的内置函数将其转换为度数。这会给我一个介于 0180 度之间或介于 0-180 度之间的值(由 atan2 的性质决定)。
有没有一种方法可以将接收到的该函数的结果(在转换为度数后),转换为标准的 360 度系统,而不改变角度 - 只改变它的表述方式?这将使我的工作更加容易。
谢谢。

你能提供一个例子吗?因为你的问题按照我理解不太有意义。 - jmcilhinney
两个向量之间的夹角始终在0到180之间。如果它在-180到180之间,那么唯一的可能是你测量了第二个向量相对于第一个向量的角度(因为交换向量会使你得到的角度变为负数)。那么,“标准360度系统”是什么意思?你能给出一些示例向量吗? - Teepeemm
你是说你想要小于零的角度表示在180到360之间吗?如果是这样,那么只需要使用一些简单的算术即可。 - jmcilhinney
@jmcilhinney 是的,但不改变实际角度,只改变它的书写方式。在正常的360度系统中,-90度的atan2输出实际上是270度。那么,将任何小于零的角度加上360就可以了吗? - user3150201
@user3150201:是的,就是这么简单。实际上,这正是我在你之前的问题中建议的(使用弧度而不是角度)。 - Martin R
显示剩余2条评论
4个回答

11

试一下这个:

double theta = Math.toDegrees(atan2(y, x));

if (theta < 0.0) {
    theta += 360.0;
}

非常简单的解决方案。谢谢。 - J.M. Janzen

4
将其转换为以北为参考的0-360度值:
double degrees = 90.0d - Math.toDegrees( Math.atan2( y, x ) );

if( degrees < 0.0d )
{
   degrees += 360.0;
}

0
一个公式,可以得出从0到360度的角度。
f(x,y)=180-90*(1+sign(x))* (1-sign(y^2))-45*(2+sign(x))*sign(y)

-(180/pi())*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))

0
根据我在三角课上学到的知识,以上答案是错误的。例如,如果你有一个向量相交点(-1,-1),在225度(标准位置)的角度下,正切将是正1,这会产生45度的弧正切。以上解决方案不会注意到这一点,向量的角度也会错误。这就是为什么弧正切公式取决于情况而不同。你必须先了解角度将是什么样子。
回想一下,我们可以将三角函数应用于任何角度,包括大的和负的角度。但当我们考虑反函数时,我们会遇到一个问题,因为有无数个角度具有相同的正切值。例如,45°和360+ 45°将具有相同的正切值。关于这个更多信息,请参见反三角函数。
http://www.mathopenref.com/arctan.html中得出。

你应该了解在各种编程语言中实现的 atan2(y, x) 的工作原理。它考虑了点 (x, y) 所在象限,并返回范围为 (-pi, pi] 而不是 [-pi/2, pi/2] 的值。在这样做时,请注意坐标顺序。在许多情况下(例如 C 和 C++),y 坐标是第一个参数,因为常见模式是将其用于替代 atan(y/x)。其他编程语言可能使用不同的约定。 - andand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接