我想对你们所有人说实话。自从高中结束后,我离开学校一年了,很多数学知识都被淘汰了。我正在为我现在正在做的页面创建这个轮盘,现在我必须从球停止的地方计算赢家。
球的位置为
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位置进行比较时。非常感谢所有帮助。
2条答案
按热度按时间0pizxfdo1#
可以使用函数
Math.atan2(y, x)
将笛卡尔坐标转换回弧度。例如,
Math.atan2(1, 1)
将生成0.7853981633974483
,即45度。如果结果看起来不正确,您可能需要修改
y
和x
的符号。icomxhvb2#
球角由下式给出:
如果Angular 为负,则加上
2π
,使其在[0, 2π)
范围内。然后
floor(Angle / sliceRad)
告诉你切片索引。