比较角度与角度范围

Compare angle with angle range

我在寻找确定方位是否在范围内的好方法时遇到问题。

我有一个名为$bearing的变量,需要与$CompareAngel +-20 degrees进行比较。
例如 $CompareAngle 可以是 90 度,那么下面的代码应该是正确的 $bearing 值 70-110 度。

if($bearing >= $CompareAngle-20 && $bearing <= $CompareAngle+20)

只要 $CompareAngle 不接近 360/0 点,这就可以正常工作。
意思是,如果 $CompareAngle 是 10 度,例如范围应该是 350-30 度。

但是如果我把它放在上面的行中,它将不起作用,因为它会变成 -10-30。
我可以做到 if($CompareAngle-20 <0){ do this if()} else{ other if }
但是,是否有一种好的方法可以像这样比较 angles/bearings 而无需一堆 if,或者这是不可能的?

这似乎是模运算符可以解决的问题。

if($bearing % 360 >= ($CompareAngle % 360)-20 % 360 && $bearing <= ($CompareAngle % 360) +20

模 360(除以 360 后的余数)基本上做的是,给定一个值 $bearing$,尽可能多地减去 360,只要 $bearing > 0

你可以计算出实际的差异。

$diff = abs($bearing - $CompareAngle);

然后像这样检查一下是否在你可以接受的范围内

if ($diff <= 20 || $diff >= 340 )