Я делаю видеоигру в чистом javascript с использованием Html-Canvas.
Мне нужно найти новые координаты сохранения x и y круга, сталкивающегося с линией.
Я уже нашел простой способ определить, пересекается ли окружность с линией, но потом я не могу понять, как найти новую позицию окружности в соответствии с направлением окружности и трением линии.
пример скриншота
Итак, обнаружение столкновений сделано, и теперь оно работает, и проблема заключается в будущем положении мяча.
Я не ищу прыгающего физика, я ищу неупругое столкновение.
То, что я думал, было:
- Соотношение angleOfStart + angleOfImpact (скажем, угол удара равен 90 °, это означает, что я сталкиваюсь на линии перпендикулярно, а угол начала равен 0 °, что означает, что я двигаюсь вправо, поэтому x не может расти, но y может идти вверх и вниз ... Я подумал, что, применяя этот отчет, мы сможем найти формулу, действительную для всех углов столкновения.
- Следуя направлению сегмента, с которым столкнулись (когда я сталкиваюсь с линией, я знаю бот-точку 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
}
Я знаю, что круг не сталкивается с сегментом .
Но если я позволю кругу переместиться в «будущий круг», тогда они столкнутся .
Мне нужно изменить значения будущих кругов, чтобы мой круг не останавливался и не проходил по линии ... Мне нужно, чтобы мой круг перемещался в соответствии с сегментом, заботясь о трении.
Я решил открыть свой разум для других решений, которые, несомненно, будут работать лучше, чем шахты.
Любая помощь приветствуется.
Извините за мой плохой английский.