Сравните угол с диапазоном углов

У меня проблема с поиском хорошего способа выяснить, находится ли подшипник между диапазонами.

У меня есть переменная с именем $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 }
Но есть ли хороший метод для сравнения углов / подшипников, подобных этому, без множества «если», или это невозможно?

0

Решение

Это похоже на то, что решит по модулю оператор.

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

Что по существу делает модуль 360 (остаток после деления на 360), учитывая значение $bearing$вычтите столько раз, сколько возможно на 360, до тех пор, пока $bearing > 0,

2

Другие решения

Вы можете рассчитать фактическую разницу.

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

Затем проверьте, находится ли он в приемлемом диапазоне, как этот.

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

По вопросам рекламы [email protected]