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

时间:2014-02-01 01:59:18

标签: math vector geometry trigonometry atan2

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

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

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

由于

4 个答案:

答案 0 :(得分:7)

试试这个:

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

根据我在trig课程中学到的内容,上述答案不正确。例如,如果矢量相交点(-1,-1)处于225度(标准位置)的角度,则切线将为正1,这将产生45度的反正切。上述解决方案不会注意到这一点,矢量的角度也是错误的。这就是为什么反正切的公式根据情况而不同的原因。你必须先知道角度是什么。

  

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

     

为了解决这个问题,反向触发函数的范围受到限制,使得反函数是一对一的,即每个输入值只有一个结果。

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

答案 3 :(得分: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)))