8

假设我atan2用来获取两个向量之间的角度。

atan2给出弧度值. 我使用 Java 中的内置函数将其转换为度数。这给了我一个介于0180度之间或介于0和之间的值-180(atan2 的性质)。

有没有办法将使用此函数接收的值(在转换为度数之后)转换为标准的 360 度系统,而不改变角度 - 只是它的写入方式?这将使我更容易合作。

谢谢

4

4 回答 4

11

尝试这个:

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

if (theta < 0.0) {
    theta += 360.0;
}
于 2014-02-01T04:21:14.437 回答
2

要将其转换为以北为参考的 0 - 360 度值:

double degrees = 90.0d - Math.toDegrees( Math.atan2( y, x ) );

if( degrees < 0.0d )
{
   degrees += 360.0;
}
于 2014-07-11T16:44:27.673 回答
0

根据我在三角课上学到的知识,上面的答案是不正确的。例如,如果您有一个矢量相交点 (-1,-1) 以 225 度角(标准位置),则切线将为正 1,从而产生 45 度的反正切。上面的解决方案不会注意到这一点,并且向量的角度会出错。这就是为什么反正切的公式会因情况而异。您必须首先了解角度是什么。

回想一下,我们可以将三角函数应用于任何角度,包括大角度和负角度。但是当我们考虑反函数时,我们遇到了一个问题,因为有无数个角具有相同的切线。例如 45° 和 360+45° 将具有相同的切线。有关这方面的更多信息,请参阅反三角函数。

为了解决这个问题,反三角函数的范围被限制为反函数是一对一的,即每个输入值只有一个结果。

来自http://www.mathopenref.com/arctan.html

于 2014-09-19T07:46:47.450 回答
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)))
于 2018-11-22T08:25:18.233 回答