假设我atan2
用来获取两个向量之间的角度。
atan2
给出弧度值. 我使用 Java 中的内置函数将其转换为度数。这给了我一个介于0
和180
度之间或介于0
和之间的值-180
(atan2 的性质)。
有没有办法将使用此函数接收的值(在转换为度数之后)转换为标准的 360 度系统,而不改变角度 - 只是它的写入方式?这将使我更容易合作。
谢谢
假设我atan2
用来获取两个向量之间的角度。
atan2
给出弧度值. 我使用 Java 中的内置函数将其转换为度数。这给了我一个介于0
和180
度之间或介于0
和之间的值-180
(atan2 的性质)。
有没有办法将使用此函数接收的值(在转换为度数之后)转换为标准的 360 度系统,而不改变角度 - 只是它的写入方式?这将使我更容易合作。
谢谢
尝试这个:
double theta = Math.toDegrees(atan2(y, x));
if (theta < 0.0) {
theta += 360.0;
}
要将其转换为以北为参考的 0 - 360 度值:
double degrees = 90.0d - Math.toDegrees( Math.atan2( y, x ) );
if( degrees < 0.0d )
{
degrees += 360.0;
}
根据我在三角课上学到的知识,上面的答案是不正确的。例如,如果您有一个矢量相交点 (-1,-1) 以 225 度角(标准位置),则切线将为正 1,从而产生 45 度的反正切。上面的解决方案不会注意到这一点,并且向量的角度会出错。这就是为什么反正切的公式会因情况而异。您必须首先了解角度是什么。
回想一下,我们可以将三角函数应用于任何角度,包括大角度和负角度。但是当我们考虑反函数时,我们遇到了一个问题,因为有无数个角具有相同的切线。例如 45° 和 360+45° 将具有相同的切线。有关这方面的更多信息,请参阅反三角函数。
为了解决这个问题,反三角函数的范围被限制为反函数是一对一的,即每个输入值只有一个结果。
给出从 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)))