【问题标题】:Compare angle with angle range比较角度与角度范围
【发布时间】:2017-10-23 23:31:15
【问题描述】:

我很难找到一种确定轴承是否在范围之间的好方法。

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

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

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

但如果我把它放在上面的行中,它将不起作用,因为它会变成 -10-30。
我可以做到if($CompareAngle-20 &lt;0){ do this if()} else{ other if }
但是有没有一种很好的方法可以在没有一堆 if 的情况下比较像这样的角度/方位,或者那是不可能的?

【问题讨论】:

    标签: php bearing


    【解决方案1】:

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

    if($bearing % 360 &gt;= ($CompareAngle % 360)-20 % 360 &amp;&amp; $bearing &lt;= ($CompareAngle % 360) +20

    模 360(除以 360 后的余数)的基本作用是,给定一个值 $bearing$,尽可能多地减去 360,只要 $bearing &gt; 0

    【讨论】:

    • 我刚刚测试了代码,它似乎可以工作。谢谢!
    【解决方案2】:

    您可以计算实际差异。

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

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

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

    【讨论】: