Javascript 如何比较圆中的弧度?

Javascript 如何比较圆中的弧度?,javascript,Javascript,我在想一种幸运轮类型的东西,你必须检查一个标记是否落在插槽上。在视觉上,我们可以看到0、2pi、4pi等。。。他们处于相同的位置。如何以编程方式检查0是否等于2pi/4pi?假设我也有半径,我想,也许我必须先把它转换成笛卡尔坐标,然后比较。然而,有没有更好的方法来做到这一点 编辑:另外,我应该明确,标记可以在插槽之间的任何位置着陆。例如,标记可以位于0到pi/6之间的任何位置。这是您想要的吗 var smallestEquivalentValueInRadians = originalValue

我在想一种幸运轮类型的东西,你必须检查一个标记是否落在插槽上。在视觉上,我们可以看到0、2pi、4pi等。。。他们处于相同的位置。如何以编程方式检查0是否等于2pi/4pi?假设我也有半径,我想,也许我必须先把它转换成笛卡尔坐标,然后比较。然而,有没有更好的方法来做到这一点

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

这是您想要的吗

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;
}

我不明白为什么%2??我不确定我的问题是否写得不好,但这不起作用
(0*Math.PI)%2==(2*Math.PI)%2
false
你让我打开维基百科:)对不起,是(2*Math.PI),而不是2使用
var PI=Math.PI
:-)代码可能更清晰。我正在补偿浮动已经不准确的事实。可能不是最好的例子,但是
0.3333*3==1
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));
}