你如何比较圆圈中的弧度?

时间:2014-02-26 11:36:49

标签: javascript

我正在考虑一种幸运轮式的东西,你必须检查一个标记是否落在一个槽上。在视觉上,我们可以看到0,2pi,4pi等......处于相同的位置。如何以编程方式检查0是否等于2pi / 4pi?假设我也有半径,我想,也许我必须首先将其转换为笛卡尔坐标然后进行比较。但是,有更好的方法吗?

编辑:另外,我应该明确标记可以落在插槽之间的任何位置。例如,标记可以是介于0到pi / 6之间的任何位置。

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

var smallestEquivalentValueInRadians = originalValueInRadians % (2 * Math.PI);

如果你想比较,你可以这样做:

a % (2 * Math.PI) === b % (2 * Math.PI)

%是模运算符,基本上它从第一个操作数减去第二个操作数,尽可能多次(假设你正在处理正数)。

为了迎合负值:

function normalizeRadian(a) {
  var circle = Math.PI * 2;
  a = a % circle;
  if (a < 0) {
    a += circle;
  }
  return a;
}

同样在比较浮点数时,最好有一些“模糊性”,因为对它们的操作可能是不精确的。

function fuzzyEqual(a, b) {
  var fuzz = 0.001;
  return a < b + fuzz && a > b - fuzz;
}

所以完整的解决方案是:

function fuzzyEqualRadians(a, b) {
  return fuzzyEqual(normalizeRadian(a), normalizeRadian(b));
}