Comments 10
В браузере Chipmunk Physics Engine demo — Pyramid Stack
![image](https://habrastorage.org/getpro/habr/comment_images/2ea/85a/382/2ea85a382ecdeeefc89768271331e612.png)
P.S. Из этого проекта, где ещё представлены некоторые демо симуляции физических моделей
Да, можно не только на Python.
но я выбрал его чтобы это была первая программа с физикой для начинающих, а Python сейчас очень популярен как первый язык.
Похоже физика не сильно точная, столкновения или неправильно считаются или кубики могут проникать друг в друга, а затем восстанавливать форму.
это типичная проблема сэмплирования времени. в первом кадре объект не долетел, а во втором уже внутри другого. надо просто увеличить количеству "субкадров", ну то есть считать время не в 60ти кадрах при 60FPS а в 120 или 240. в итоге всё равно произойдет проникновение так как "физика" считается лишь постфактум - сместили объект и посчитали что будет дальше происходить. просто при большем количестве промежуточных шагов получается меньше "ошибок". на самом деле при большой скорости движения может произойти и "тунелирование" объектов когда за время между сэмплами объект полностью пройдет через другой оказавшись на другой стороне
Это уже давным-давно научились делать правильно. Вместо тел в геометрии поиска столкновений используются вытянутые по их скорости "капсулы". Это позволяет определять все столкновения и высчитывать точный момент столкновения. И шаг времени не приходится избыточно уменьшать.
И статические стенки из коробок тоже уже нормальные движки умеют держать стабильными без этих прыжков и взаимопроникновений. Выглядит как Box2D 10, если не 15 лет назад.
Можете привести пример библиотеки или движка, где сделано правильно?
Про поиск столкновений - любой, заявляющий Continuous collision detection, например Unity, или тот же Box2D.
Со стенками из кубиков всё сложнее, общее решение не очень практично, так как требует честного решения СЛАУ. Но небольшими хаками это тоже чинится, например ещё 13 лет назад в Havok стопки из кубиков были вполне стабильны. Если не ошибаюсь, то там было многопроходное решение столкновений.
Физика в Python с использованием Pymunk