比较角度与角度范围

Posted

技术标签:

【中文标题】比较角度与角度范围【英文标题】: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 的情况下比较像这样的角度/方位,或者那是不可能的?

【问题讨论】:

【参考方案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 )

【讨论】:

以上是关于比较角度与角度范围的主要内容,如果未能解决你的问题,请参考以下文章

比较弧的角度和公共点

如何通过两个对象打字稿角度6进行比较

将 Char 与 == 和单引号进行比较会给出警告

[转] 比较清楚的阻塞与非阻塞和同步与异步

如何比较来自api的jobId和角度材料中的mat-table

在角度组件中使用“要求”