知道角度是否可以是北、南的最快代码;西方或东方

Fastest code to know if an angle could be North, South;west or East

本文关键字:代码 东方 是否      更新时间:2023-09-26

我有一个处理叠氮运算的代码。我想区分方位角是在0100200300400附近还是在0, PI/2, PI, PI*(3/2), 2*PI, (N, E, S, W)附近。在大多数情况下,我会收到一个不在这个范围内的角度,所以我需要最快的方法来丢弃,我有这些值。

我想这样做是为了控制纯水平或垂直方位角的线性方程。

当然,我将使用epsilon方法。

所以我会有:

if  Math.abs(azi)< 0.0000001 ...
else if  Math.abs(azi-100)< 0.0000001 ...
else  Math.abs(azi-200)< 0.0000001 ...
else   Math.abs(azi-300)< 0.0000001 ...
else   Math.abs(azi-400)< 0.0000001 ...
else other

正如你所看到的,我必须检查5个条件来检查我是否有"其他"值。

另一方面,你们知道sin(N)=0,sin(S)=0,cos(E)=0,余弦(W)=0,所以:

  if  Math.abs(Math.cos(azi) ) < 0.0000001 ...
  else if  Math.abs(Math.sin(azi) ) < 0.0000001 ...
  else other

现在我有两个条件,一个数学三角运算和5个简单的算术运算。正如您在jsperf中看到的,算术速度更快。

jsperf角度检查

我的问题是:还有其他快速的方法吗?

我不确定模数性能与其他算法相比如何,但这样至少可以将其放在一行中。

if ((azi + 0.0000001) % 100) < 0.0000002 ...
else other

除了潜在的舍入错误之外,这应该和您的代码做同样的事情。

我在你的页面上试过了,它的性能似乎快了三倍。