Столкновение скользящей окружности (js) - PullRequest
0 голосов
/ 04 января 2019

Я делаю видеоигру в чистом javascript с использованием Html-Canvas.

Мне нужно найти новые координаты сохранения x и y круга, сталкивающегося с линией.

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

пример скриншота

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

Я не ищу прыгающего физика, я ищу неупругое столкновение.

То, что я думал, было:

  1. Соотношение angleOfStart + angleOfImpact (скажем, угол удара равен 90 °, это означает, что я сталкиваюсь на линии перпендикулярно, а угол начала равен 0 °, что означает, что я двигаюсь вправо, поэтому x не может расти, но y может идти вверх и вниз ... Я подумал, что, применяя этот отчет, мы сможем найти формулу, действительную для всех углов столкновения.
  2. Следуя направлению сегмента, с которым столкнулись (когда я сталкиваюсь с линией, я знаю бот-точку a и точку b, тогда я могу вычислить угол этой линии, тогда я могу заставить свой круг двигаться только в этом направлении, умножение начальной скорости - немного трения).

Обе эти идеи в моей голове работают, но однажды реализованные в javascript их, кажется, работают только иногда ...

Допустим, я столкнулся с сегментом объекта:

segment = {
   a : {
         x : // some value,
         y : // some value
       },
   b : {
         x : // some value,
         y : // some value
       }
}

circle = {
    x: // value,
    y: // value,
    ray: // value
}

future_circle = {
    x: // x where user wants to go,
    y: // y where user wants to go,
    ray : // value
}

Я знаю, что круг не сталкивается с сегментом . Но если я позволю кругу переместиться в «будущий круг», тогда они столкнутся .

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

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

Извините за мой плохой английский.

...