Математика, чтобы признать победителя в RouletteWheel - PullRequest
0 голосов
/ 02 мая 2018

Так что я буду честен со всеми вами. С тех пор как закончилась старшая школа, и у меня был год от школы, много математики исчезло. Я создаю это колесо рулетки для страницы, которую я делаю в данный момент, и теперь я должен вычислить победителя, с которого останавливается мяч.

Мяч имеет позицию

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

Итак, что я в основном пытаюсь понять, так это то, как я должен проверять, в каком из срезов граничит шарик, когда он останавливается. Мой тезис заключается в том, что я должен проверить это следующим образом.

Если угол шара (альфа) находится в пределах угла, созданного срезами [i] .startAngle и - || -.stopAngle. Получить этот кусок и предупредить этот элемент. В основном я теряюсь, когда мне нужно сравнить радианы, в которых представлен срез, с позициями x и y, в которых представлен шар. Вся помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Угол наклона шара определяется как

atan2(Y - Cx, X - Cy)

в радианах. Если угол отрицательный, добавьте , чтобы быть в диапазоне [0, 2π).

Тогда floor(Angle / sliceRad) сообщает вам индекс среза.

0 голосов
/ 02 мая 2018

Вы можете использовать функцию Math.atan2(y, x) для преобразования декартовых координат обратно в радианы.

Например, Math.atan2(1, 1) дает 0.7853981633974483, что составляет 45 градусов.

Возможно, вам придется поиграть со знаками y и x, если результаты окажутся неправильными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...