2017-05-23 21 views
0

軸受が範囲内にあるかどうかを調べるには、問題があります。角度を角度範囲と比較する

私は$bearingという変数を持っています。これはと比較する必要があります。
たとえば、$ 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 }
しかし、これのような角度/ベアリングを比較する良い方法がありますか?

答えて

2

これはモジュロオペレータが解決するもののようです。基本的に何モジュロ360(360で割った余り)

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

$bearing > 0限りできるだけ多くの回数360を減算し、値$bearing$与えられ、です。

+0

私はコードをテストしたところ、うまくいくようです。ありがとうございました! – Andreas

0

実際の差異を計算することができます。

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

次に、このような許容範囲内にあるかどうかを確認します。

if ($diff <= 20 || $diff >= 340) 
関連する問題