将角度保持在 -179 到 180 度之间的简单方法

2022-09-01 02:13:38

有没有一种简单的方法可以将角度(以度为单位)转换为-179和180之间?我确信我可以使用mod(%)和一些if语句,但它变得丑陋:


//Make angle between 0 and 360
angle%=360;

//Make angle between -179 and 180
if (angle>180) angle-=360;

似乎应该有一个简单的数学运算,可以同时执行这两个语句。我现在可能只需要为转换创建一个静态方法。


答案 1
// reduce the angle  
angle =  angle % 360; 

// force it to be the positive remainder, so that 0 <= angle < 360  
angle = (angle + 360) % 360;  

// force into the minimum absolute value residue class, so that -180 < angle <= 180  
if (angle > 180)  
    angle -= 360;  

答案 2

试试这个!

atan2(sin(angle), cos(angle))

atan2具有 [-π, π) 的范围。这利用了tan θ = sin θ / cos θ的事实,这足够聪明,可以知道哪个象限θ在哪个。atan2

由于您需要度数,因此您需要将角度与弧度相互转换:

atan2(sin(angle * PI/180.0), cos(angle * PI/180.0)) * 180.0/PI

更新我之前的例子是完全合法的,但将范围限制为±90°。的范围是 -179° 到 180° 的所需值。保存如下。atan2


试试这个:

asin(sin(angle)))

的域是实线,范围是 。的域是 ,范围是 。由于 是 的反函数,因此您的输入不会更改(很多,有一些漂移,因为您使用的是浮点数)。因此,您可以取回输入值,并得到所需的范围作为反正弦受限范围的副作用。sin[-1, 1]asin[-1, 1][-PI/2, PI/2]asinsin

由于您需要度数,因此您需要将角度与弧度相互转换:

asin(sin(angle * PI/180.0)) * 180.0/PI

(警告:Trig函数比简单的除法和减法运算慢很多倍,即使它们是在FPU中完成的!