javascript RouletteWheel中计算赢家的数学

insrf1ej  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(117)

我想对你们所有人说实话。自从高中结束后,我离开学校一年了,很多数学知识都被淘汰了。我正在为我现在正在做的页面创建这个轮盘,现在我必须从球停止的地方计算赢家。
球的位置为

x = Math.cos(alpha) * radius;
y = Math.sin(alpha) * radius;

其中轮的每个切片都按如下方式绘制。

var slice = {startAngle: deg2rad(deg), stopAngle: deg2rad(deg+sliceDeg), deg: deg};
ctx.arc(centerX, centerY, width/2, slice.startAngle, slice.stopAngle);

其中切片的绘制方式如下

function drawAll(){
  ctx.clearRect(0, 0, width, width); //Clear the canvas
  for(var i=0; i < locations.length; i++){ 
    drawSlice(deg, color[i]);
    deg += sliceDeg;
  }
}

所以我基本上想弄明白的是,我如何去检查球停下来的时候,是在哪一个切球上,我的论点是,我必须按照下面的方法去检查。
如果球的Angular (alpha)在由slices[i].startAngle和-创建的Angular 内||- . stopAngle。获取切片并提醒此项目。我迷失的地方基本上是当我将切片表示的弧度与球表示的x和y位置进行比较时。非常感谢所有帮助。

0pizxfdo

0pizxfdo1#

可以使用函数Math.atan2(y, x)将笛卡尔坐标转换回弧度。
例如,Math.atan2(1, 1)将生成0.7853981633974483,即45度。
如果结果看起来不正确,您可能需要修改yx的符号。

icomxhvb

icomxhvb2#

球角由下式给出:

atan2(Y - Cx, X - Cy)

如果Angular 为负,则加上,使其在[0, 2π)范围内。
然后floor(Angle / sliceRad)告诉你切片索引。

相关问题