Javascript 轮盘赌赢家的数学解释

Javascript 轮盘赌赢家的数学解释,javascript,math,canvas,Javascript,Math,Canvas,所以我要对你们大家说实话。自从高中结束,我离开学校已经一年了,很多数学都淡出了课堂。我正在为我目前正在做的页面创建这个轮盘赌,现在我必须从球停的地方计算赢家 球的位置为 x = Math.cos(alpha) * radius; y = Math.sin(alpha) * radius; 其中,车轮的每一片都绘制如下 var slice = {startAngle: deg2rad(deg), stopAngle: deg2rad(deg+sliceDeg), deg: deg}; ctx.a

所以我要对你们大家说实话。自从高中结束,我离开学校已经一年了,很多数学都淡出了课堂。我正在为我目前正在做的页面创建这个轮盘赌,现在我必须从球停的地方计算赢家

球的位置为

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;
  }
}
函数drawAll(){
clearRect(0,0,width,width);//清除画布
对于(var i=0;i
所以我基本上想了解的是,当球停下来时,我如何检查球在哪一个界内。我的论文是,我必须检查它如下

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

如果球的角度(alpha)在切片[i].startAngle和-| |-.stopAngle创建的角度范围内。获取该切片并提醒此项目。我迷路的地方基本上是当我要比较用球的x和y位置表示的切片的弧度时。非常感谢您的帮助

您可以使用函数
Math.atan2(y,x)
将笛卡尔坐标转换回弧度

例如,
Math.atan2(1,1)
产生
0.7853981633974483
,即45度


如果结果不正确,您可能需要摆弄
y
x
的符号。

球的角度由

atan2(Y - Cx, X - Cy)
以弧度表示。如果角度为负,则将
添加到范围
[0,2π)


然后
地板(角度/弧度)
告诉你切片索引。

老实说,我还没有完全让它工作起来。请看下面的JSFIDLE。你能看到我哪里出错了吗?@Albinwärme:你没有说轮盘赌没有从顶部看到。我的意思是画布的比例是1:1,但我应用到它的css使画布的高度小于宽度为了获得更好的感觉。这会改变我们对赢家的解释吗?@Albinwärme:拉伸不会保留角度。更新:我已经使用了您提供的提示。但是它只在车轮不旋转时起作用。请参见链接的JSFIDLE。当您取消注释车轮的运动时(在第130行)你会发现它会再次给出错误的结果。这取决于什么。我个人不知道