Я собираюсь разработать игру с карманом. У меня проблема с столкновением двух частей. Как найти точку столкновения двух частей. А затем, как найти угол и расстояние между кусками после столкновения. Я нашел решение точки столкновения на circle-circle collision. здесь решение описывается тригонометрией, но я хочу решение с векторной математикой. С помощью которой проблема расстояния, пройденного после столкновения, также будет легко решена.Столкновение круглых объектов
ответ
Вам не нужно искать точку столкновения для самого вычисления столкновения. Для того, чтобы обнаружить событие столкновения, вам нужно всего лишь сравнить расстояние центров идут сумма радиусов
sqrt(sqr(x2-x1)+sqr(y2-y1))<=r1+r2
или
dx*dx+dy*dy <= (r1+r2)*(r1+r2)
где (x1,y1)
и (x2,y2)
являются позиции дисков 1 (с массой m1
, радиус r1
и скорости (vx1,vy1)
) и 2. Различия всегда 2 минус 1, dx=x2-x1
т.д.
Вы почти никогда не поймете, что столкновение происходит в момент времени дискретизации времени. С приведенной выше формулой круги уже перекрываются. В зависимости от временного шага и общих скоростей это может быть незначительным или может привести к серьезной перестрелке. Следующие простые вычисления предполагают замедленное движение, т. Е. Очень небольшое перекрытие во время последнего шага времени.
Единственное, что происходит при полностью упругом столкновении невращающихся дисков, - это изменение скорости. Это изменение должно произойти только один раз, когда дальнейшее движение приведет к дальнейшему сокращению расстояния, то есть, если
dx*dvx+dy*dvy < 0
где dvx=vx2-vx1
и т.д.
Используя эти идеи, вычисление выглядит следующим образом (см https://stackoverflow.com/a/23193044/3088138 для более подробной информации)
dx = x2-x1; dy = y2-y1;
dist2 = dx*dx + dy*dy;
R = r1+r2;
if (dist2 <= R*R)
{
dvx=vx2-vx1; dvy=vy2-vy1;
dot = dx*dvx + dy*dvy;
if (dot < 0)
{
factor = 2/(m1+m2)*dot/dist2;
vx1 += m2*factor*dx;
vy1 += m2*factor*dy;
vx2 -= m1*factor*dx;
vy2 -= m1*factor*dy;
}
}
- 1. Столкновение объектов
- 2. Box2D обнаружение одностороннего столкновения для круглых объектов
- 3. Как обнаружить столкновение объектов
- 4. AR app - обнаружение круглых объектов
- 5. Разрешение столкновений круглых кругов
- 6. столкновение объекта с матрицей объектов на холсте
- 7. Столкновение объектов Unity 5 не обнаружено
- 8. Проверить столкновение объектов C#: 3D (XYZ)
- 9. Как проверить, когда столкновение двух объектов
- 10. Столкновение с использованием массива объектов класса
- 11. Лучший способ проверить столкновение игровых объектов
- 12. Столкновение выделенной линии и объектов (Corona SDK)
- 13. Tkinter в Python - обнаружение объектов (не столкновение)
- 14. Как обнаружить столкновение объектов в Pygame?
- 15. Трехмерное столкновение с треугольником.
- 16. Столкновение с перетаскиваемым объектом
- 17. Столкновение Обнаружение объектов в определенной области камеры в Unity3d
- 18. Box2D b2Контактный датчик не может обнаружить столкновение объектов
- 19. Столкновение объектов, отскакивающих, когда isTrigger истинно, а не через
- 20. Как обнаружить столкновение двух объектов только один раз в pygame?
- 21. Как обнаружить столкновение объектов для этой игры JavaScript
- 22. Unity - Как обнаружить столкновение на коллайдере дочерних объектов
- 23. Как обнаружить столкновение двух нарисованных объектов в C# 2010 express
- 24. столкновение обнаружение
- 25. пуля Столкновение
- 26. Столкновение частиц
- 27. обнаруживая Texture Столкновение
- 28. Нужно удалить числа в круглых скобках и круглых скобках
- 29. Как получить содержимое круглых скобок, но не самих круглых скобок
- 30. Столкновение не обнаружено в единстве3d
Прочитайте ответ до конца. В конце концов тригонометрия отменяется. –
Это прекрасно, но для дальнего путешествия после столкновения нам нужна векторная физика. –
Что вы ищете? У вас есть критерий столкновения. У вас есть точка столкновения, которая находится где-то на линии между двумя центральными точками ваших объектов. У вас есть нормаль на касательной плоскости в точке столкновения, которая представляет собой только разностный вектор между точкой столкновения и центральной точкой. Это все векторные математики, не связанные с тригонометрическими функциями. –