2017-05-23 12 views
0

베어링이 범위 사이에 있는지 알아내는 좋은 방법을 찾는데 문제가 있습니다.각도 범위와 각도를 비교하십시오.

나는 $bearing이라는 변수가 있는데이 변수는 과 비교해야합니다.
예를 들어, $ CompareAngle은 90 도일 수 있습니다. 다음 코드는 $ bearing beeing 값이 70-110 도인 경우 true 여야합니다.

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 }
하지만 이런 경우 앵글/베어링을 비교하는 좋은 방법이 있습니까?

답변

2

이것은 모듈러스 연산자가 해결할 수있는 것처럼 보입니다. 가능한 한 오래 $bearing > 0만큼 기본적으로, 값 $bearing$을 주어 무엇을 모듈로 360 (360으로 나누기 후 나머지를)

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

, 빼기만큼 360.

+0

방금 ​​코드를 테스트 한 결과 제대로 작동하는 것 같습니다. 고맙습니다! – Andreas

0

실제 차이를 계산할 수 있습니다.

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

그런 다음 허용되는 범위에 있는지 확인하십시오.

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