我需要将标准360度角的计算反转为atan2。
这是我的标准角度计算
Standard angle = (int) Math.toDegrees(Math.atan2(y,x));
if(angle < 0)
angle += 360;
我需要从角度来看Math.atan2值如何实现。
答案 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;
}