最快的代码,可以知道角度是北,南,西还是东

时间:2014-10-02 06:55:26

标签: javascript

我有一个处理方位角操作的代码。 我想区分方位角是否接近0,100,200,300,400或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,cos(W)= 0,所以:

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

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

jsperf angle check

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

1 个答案:

答案 0 :(得分:1)

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

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

除了潜在的舍入错误之外,这应该与您的代码完全相同。

I tried it on your page它似乎的速度提高了约三倍。