Глава 3 • Детекция и Разрешение Ударов

Столкновения и Импульсы

Что происходит, когда два тела встречаются? Разбираем геометрию пересечения (детекция), депенетрацию (разделение) и математику импульсного удара с сохранением импульса.

🎯 Эксперимент 1: Лаборатория Столкновения Двух Тел

Настройте массы и упругость. Проверьте закон сохранения суммарного импульса и кинетической энергии.

🖱️ Перетащите шары или запустите их навстречу кнопкой
Импульс P: 0.0 кг·px/с
Энергия E: 0.00 kJ
Массы объектов
Масса шара 1 (m₁) 1.0 кг
Масса шара 2 (m₂) 3.0 кг
Упругость удара (e) 1.00

Формула импульса $J$

Когда два тела сталкиваются, возникает мгновенный скачок скорости вдоль контактной нормали $\hat{n}$. Величина скачка (скалярный импульс $J$) выражается формулой:

J = \frac{-(1 + e) \cdot (v_{rel} \cdot \hat{n})}{\frac{1}{m_1} + \frac{1}{m_2}}

После нахождения $J$ новые скорости объектов рассчитываются в один шаг:
v₁ -= (J / m₁) * n
v₂ += (J / m₂) * n

Позиционная депенетрация (De-penetration)

Если ограничиться только изменением скоростей, из-за дискретности шага по времени тела на следующем кадре могут остаться перекрывающимися. Движок начнет повторно применять импульс, и шары "слипнутся" или "застрянут".

Правило разделения: смещаем тела вдоль вектора нормали пропорционально их обратным массам: более легкое тело отталкивается дальше, тяжелое почти не сдвигается!

🎱 Эксперимент 2: Бильярдная Арена со Множеством Тел

Итеративное разрешение одновременных столкновений десятков тел. Включите гравитацию или хватайте шары курсором!

🖱️ Схватите любой шар и бросьте его со всей силы в кучу
Настройки арены
Количество тел 14

Сложность $O(N^2)$ и Broad-Phase

Для наивной проверки всех пар из $N$ объектов требуется $N(N-1)/2$ проверок. При 15 объектах это всего 105 проверок в кадр. Но для сотен объектов в играх применяют Broad-Phase фильтрацию:

  • Spatial Hashing (Пространственная сетка): экран делится на ячейки; проверяются только шары в соседних ячейках.
  • QuadTree / BVH (Деревья объемов): иерархическая группировка габаритных рамок AABB.

Итеративный релаксационный решатель (Iterative Solver)

В ситуации, когда три или более шара зажаты вместе в угол, однократное разрешение столкновения не может удовлетворить все условия сразу. Поэтому игровые движки (Box2D, PhysX) прогоняют разрешение пар циклом по 3-8 итераций подряд за один шаг физики.

← Назад: Пружины и Ткань Далее: 2D Жидкости →