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