ГоловнаСтаттіФізика та Механіка

2D Зіткнення: Імпульс, Енергія та Коефіцієнт Повернення

Як розбиття швидкості на нормальну та дотичну компоненти перетворює хаотичне 2D зіткнення в 1D формулу, і як метод на основі імпульсу з коефіцієнтом повернення забезпечує реалістичну фізику рушіїв.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Два закони, одна зіткнення

Коли дві кулі стикаються в площині, точно два фізичні величини регулюють результат: імпульс завжди зберігається (зовнішні сили не діють на пару під час короткого контакту), а кінетична енергія зберігається лише у ідеалізованому пружному випадку. Все про те, як працює двигун реакції на зіткнення, випливає з комбінування цих двох законів збереження з геометрією контакту.

Ключова техніка, яка робить 2D зіткнення обчислювально здійсненним, полягає у розкладанні швидкості кожної кулі на дві компоненти в момент удару: компонент вздовж лінії, що з’єднує центри двох куль (нормальна спрямованість) та компонент перпендикулярний до неї (тангенціальна спрямованість). Лише нормальні компоненти змінюються під час ідеалізованого зіткнення без тертя – тангенційні компоненти проходять повз, не зазнаючи змін, оскільки немає сили вздовж цієї напрямки, щоб їх змінити.

n = (x2 − x1) / |x2 − x1| // одиничний нормальний вектор, центр 1 → центр 2 v1n = v1 · n v2n = v2 · n // нормальні компоненти (скалярний добуток) v1t = v1 − v1n·n v2t = v2 − v2n·n // тангенційні компоненти (не змінюються) 1D пружне зіткнення вздовж нормалі (маси m1, m2): v1n' = [(m1−m2)·v1n + 2·m2·v2n] / (m1+m2) v2n' = [(m2−m1)·v2n + 2·m1·v1n] / (m1+m2) нова швидкість: v1' = v1n'·n + v1t v2' = v2n'·n + v2t Це спрощує складну 2D векторну проблему до стандартної 1D пружної формули зіткнення, застосованої виключно вздовж нормалі, а потім об’єднується з незмінною тангенціальною компонентою. Кудись рівні маси точно міняються свої нормальні швидкості – класичний результат «колиски Ньютона», тоді як легка куля, що вдаряється у дуже важку, просто відскакує назад майже з інвертованою швидкістю, оскільки важка куля майже не рухається.

n = (x2 − x1) / |x2 − x1|          // unit normal, centre 1 → centre 2
v1n = v1 · n     v2n = v2 · n        // normal components (dot product)
v1t = v1 − v1n·n  v2t = v2 − v2n·n   // tangential components (unchanged)

1D elastic collision along the normal (masses m1, m2):
v1n' = [(m1−m2)·v1n + 2·m2·v2n] / (m1+m2)
v2n' = [(m2−m1)·v2n + 2·m1·v1n] / (m1+m2)

new velocity:  v1' = v1n'·n + v1t     v2' = v2n'·n + v2t
жива демонстрація · пов'язана симуляція● LIVE

Коефіцієнт повернення визначає все між зіткненнями

Реальні зіткнення рідко бувають абсолютно пружними — частина кінетичної енергії втрачається у вигляді звуку, тепла та деформації. Коефіцієнт повернення *e*, який варіюється від 0 (абсолютно непружне, об’єкти злипаються і рухаються з поширеною швидкістю) до 1 (абсолютно пружне, без втрат енергії), визначає, наскільки змінюється відносна нормальна швидкість:

e = −(v1n' − v2n') / (v1n − v2n) Формула на основі імпульсу (використовується в більшості фізичних рушіїв): J = −(1 + e) · (v1n − v2n) / (1/m1 + 1/m2) v1' = v1 + (J/m1)·n v2' = v2 − (J/m2)·n Ця формула на основі імпульсу є тим, що реальні фізичні рушії фактично реалізують: обчислюється один скалярний імпульс J вздовж нормалі відносною швидкістю підходу та коефіцієнтом повернення, а потім застосовується симетрично для кожної маси. Вона безпосередньо узагальнюється до тертя (додається імпульс по торцевій площині, обмежений μJ), до обертання (імпульс застосовується в контактній точці замість центру маси, що надає крутну швидкість) та до стану спокою при зіткненні (ланцюг невеликих імпульсів розв’язується ітеративно, оскільки два об'єкти не можуть просто перетинатися та розриватися на кожному кадрі).

e = −(v1n' − v2n') / (v1n − v2n)     (relative separation speed / relative approach speed)

impulse-based form (used in most physics engines):
J = −(1 + e) · (v1n − v2n) / (1/m1 + 1/m2)
v1' = v1 + (J/m1)·n      v2' = v2 − (J/m2)·n

Збереження як перевірка на правильність

Найкорисніша перевірка на правильність будь-якої реалізації зіткнень – це побудова загальної імпульсу та, для e = 1, загальної кінетичної енергії в часі – обидва повинні залишатися постійними з числовим точним значенням. Збереження імпульсу є жорстким обмеженням формули імпульсу вище (два імпульси рівні за величиною та протилежні за знаком), тому якщо симуляція показує відхилення імпульсу, помилка майже завжди в геометрії – використання неправильного нормалі контакту або розв’язування зіткнення у неправильний момент відносно моменту їхньої фактичної зустрічі.

Frequently asked questions

Чому рівномірні кулі з однаковою масою обмінюються швидкостями точно в еластичному зіткненні?

Встановлення m1 = m2 = m у 1D формулу еластичного зіткнення вздовж нормалі призводить до того, що v1n' стає рівним v2n і v2n' стає рівним v1n точно — дві кулі повністю обмінюються своїми компонентами нормальної швидкості, що є фізичним поясненням того, чому нерухома шайба в більшості випадків відскакує зі швидкістю, з якою на неї припала початкова швидкість, а початкова швидкість майже зупиняється.

Що фізично означає коефіцієнт повернення 0.5?

Це означає, що кулі відокремлюються один від одного після зіткнення на половину від швидкості, з якою вони підходили одна до одної — частина кінетичної енергії вздовж лінії удару втрачена у вигляді тепла, звуку або деформації, тоді як e = 1 зберігає цю швидкість точно, а e = 0 залишає об'єкти в русі з нульовою відносною швидкістю розділення.

Чому змінюється лише нормальна компонента швидкості у нестримному зіткненні?

Оскільки сила контакту між двома гладкими циліндричними тілами діє виключно вздовж лінії, що з'єднує їх центри — немає перпендикулярної сили, яка б змінювала обертальне рух, тому ця компонента просто передається зіткненням без змін, а вся фізика відбувається вздовж нормалі.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте 2D Collisions і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію 2D Collisions

Що ви знайшли?

Додати кроки відтворення (опційно)