-1

我需要将标准 360 角的计算反向到 atan2。

这是我的标准角度计算

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

if(angle < 0)
  angle += 360;

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

4

4 回答 4

2

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

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

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

angle = angle % 360 

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

于 2016-09-12T07:22:33.493 回答
1

虽然你的问题不是很清楚,但似乎你想检索语句之前的角度

if (angle < 0)
  angle += 360;

Asatan2返回范围内的值[-π,π),即[-180°,180°),子范围[-180°,0°)被映射到[180°,360°)。然后你反转

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

您还需要转换回弧度。

于 2016-09-12T08:46:52.390 回答
1

具有 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)
于 2016-09-12T17:12:43.800 回答
-1

我自己的答案

int normalizeAngle(int angle)
{
    int newAngle = angle;
    while (newAngle <= -180) newAngle += 360;
    while (newAngle > 180) newAngle -= 360;
    return newAngle;
}
于 2016-09-12T07:29:33.853 回答