将标准360度转换为atan2

时间:2016-09-12 06:54:37

标签: math angle degrees radians atan2

我需要将标准360度角的计算反转为atan2。

这是我的标准角度计算

Standard angle =  (int) Math.toDegrees(Math.atan2(y,x));

if(angle < 0)
  angle += 360;

我需要从角度来看Math.atan2值如何实现。

4 个答案:

答案 0 :(得分:1)

将度范围0..360转换为弧度范围-Pi..Pi

if(angle > 180)
   angle -= 360;
angle_radians = Math.toRadians(angle);

如果您的角度可能超出标准范围(您没有提到这个),请使用整数模而不是循环

angle = angle % 360 

(检查模运算符如何使用您的语言中的负数)

答案 1 :(得分:0)

虽然你的问题不是很清楚,但似乎你想在语句

之前检索角度
if (angle < 0)
  angle += 360;

atan2返回[-π,π)范围内的值,即[-180°,180°)时,子范围[-180°,0°)将映射到[180°,360°)。然后用

反转
if (angle >= 180°)
  angle-= 360;

您还需要转换回弧度。

答案 2 :(得分:0)

具有O(1)性能的一般解决方案:

double generalModulus(double value, double modulus, double offset) {
    return value - Math.floor((value-offset)/modulus) * modulus + offset;
}

double normalizeAngleDegrees(double angleInDegrees, double offset) {
    return generalModulus(angleInDegrees, 360.0, offset);
}

double normalizeAngleRadians(double angleInRadians, double offset) {
    return generalModulus(angleInRadians, 2.0*Math.PI, offset);
}

使用:

double normDeg = normalizeAngleDegrees(angle, -180); // produces angle in range [-180, 180)
double normRad = normalizeAngleRadians(angle, 0); // produces angle in range [0, 2*Pi)

答案 3 :(得分:-2)

我自己的回答

int normalizeAngle(int angle)
{
    int newAngle = angle;
    while (newAngle <= -180) newAngle += 360;
    while (newAngle > 180) newAngle -= 360;
    return newAngle;
}