Бильярд: двумерные столкновения

Двумерные столкновения шаров: обработка удара и сохранение в системе многих тел.

Столкновение шаров в двух измерениях разрешают вдоль линии центров: импульс перераспределяется только по этому направлению, а перпендикулярная составляющая скоростей не меняется.

От одномерного удара к плоскости

На бильярдном столе шары сталкиваются под углом. Ключевая идея: удар двух гладких шаров происходит вдоль линии, соединяющей их центры. Скорость каждого шара раскладывают на две части — вдоль этой линии (нормальную) и поперёк (тангенциальную). По нормали применяют одномерные формулы упругого удара, а тангенциальная часть остаётся нетронутой (трения нет). Затем части складывают обратно.

Алгоритм шага бильярда

Симуляция бильярда состоит из двух чередующихся фаз: свободное движение (шары летят по прямой) и обработка столкновений (когда расстояние между центрами становится меньше суммы радиусов). Опишем логику псевдокодом, а потом — как проверять корректность:

на каждом шаге dt:
  1. двигаем все шары: x += vx*dt, y += vy*dt
  2. для каждой пары шаров i, j:
       если расстояние(i,j) < r_i + r_j:   # касание
         n = единичный вектор от i к j
         сводим скорости к проекциям на n
         меняем нормальные компоненты по формулам упругого удара
         восстанавливаем скорости
  3. отражаем шары от бортов стола (смена знака нужной компоненты)

Проверять такую симуляцию нужно теми же законами сохранения. Суммарный импульс по обеим осям и суммарная кинетическая энергия должны оставаться постоянными на протяжении всей партии — каждый удар лишь перераспределяет их между шарами. Если энергия растёт или падает, в обработке столкновения ошибка.

Тонкость: проникновение и «склейка»

Главная численная ловушка бильярда — проникновение. За шаг dt шары могут не просто коснуться, а налезть друг на друга. Если обработать удар, когда они уже перекрылись, они могут «слипнуться»: оттолкнуться, но на следующем шаге снова оказаться внутри друг друга и оттолкнуться обратно — и так дрожать на месте. Лечат это либо мелким шагом, либо аккуратным «раздвиганием» шаров до касания перед расчётом удара, либо точным вычислением момента столкновения (event-driven подход).

Как работает под капотом

Разложение скорости на нормальную и тангенциальную — это поворот системы координат в направление удара. В повёрнутой системе двумерное столкновение распадается на одномерное (по нормали) плюс «ничего не происходит» (по тангенциали). Этот приём — разложить сложное движение по удобным осям — встречался уже в баллистике и встретится снова. Он отражает глубокий принцип: правильно выбранная система координат превращает запутанную задачу в набор простых независимых.

Частые ошибки

  • Менять обе компоненты скорости при ударе. Меняется только нормальная (вдоль линии центров); тангенциальная сохраняется.
  • Обрабатывать удар при сильном перекрытии шаров. Это ведёт к «слипанию» и дрожанию; нужен мелкий шаг или раздвигание.
  • Забыть проверять энергию. Накопление ошибок в обработке ударов незаметно без контроля сохранения.

Итоги

  • Двумерный удар разрешают вдоль линии центров шаров.
  • Нормальная компонента меняется по формулам 1D-удара, тангенциальная — нет.
  • Проникновение шаров — главная численная ловушка, ведёт к «слипанию».
  • Корректность проверяют сохранением суммарного импульса и энергии.
Проверьте себя
1. Вдоль какого направления разрешают столкновение двух гладких шаров?
AВдоль направления движения первого шара
BВдоль линии, соединяющей центры шаров
CВдоль борта стола
DВдоль вертикали
2. Что происходит с тангенциальной (поперечной) компонентой скорости при ударе гладких шаров?
AМеняет знак
BНе меняется
CОбнуляется
DУдваивается
3. К чему приводит обработка удара при сильном перекрытии шаров?
AК росту энергии
BК «слипанию» и дрожанию шаров на месте
CК исчезновению шаров
DК ускорению счёта