У меня проблема с поиском хорошего способа выяснить, находится ли подшипник между диапазонами.
У меня есть переменная с именем $bearing
и это нужно сравнить с $CompareAngel +-20 degrees
,
Например, $ CompareAngle может иметь значение 90 градусов, тогда приведенный ниже код должен быть истинным со значениями $ beeing 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 }
Но есть ли хороший метод для сравнения углов / подшипников, подобных этому, без множества «если», или это невозможно?
Это похоже на то, что решит по модулю оператор.
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 )