HomeArticlesPhysics & Mechanics

2D Collisions: Momentum, Energy and the Restitution Coefficient

How splitting velocity into normal and tangential components turns a messy 2D collision into a 1D formula, and how the impulse-based method with restitution powers real physics engines.

mysimulator teamUpdated June 2026≈ 8 min read▶ Open the simulation

Two laws, one collision

When two balls collide in a plane, exactly two physical quantities discipline the outcome: momentum is always conserved (nothing external pushes on the pair during the brief contact), and kinetic energy is conserved only in the idealised elastic case. Everything about how a collision-response engine works falls out of combining these two conservation laws with the geometry of the contact.

live demo · elastic and inelastic ball collisions with adjustable restitution● LIVE

The trick that makes a 2D collision tractable is to split each ball's velocity into two components at the moment of impact: the component along the line connecting the two centres (the normal direction) and the component perpendicular to it (the tangential direction). Only the normal components change during an idealised frictionless collision — the tangential components pass straight through untouched, because there's no force along that direction to alter them.

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

This reduces a messy 2D vector problem to the textbook 1D elastic collision formula applied purely along the normal axis, then recombined with the untouched tangential component. Equal masses swap their normal velocities exactly — the classic Newton's-cradle result — while a light ball hitting a very heavy one simply bounces back with nearly reversed velocity, as the heavy ball barely moves.

The restitution coefficient governs everything in between

Real collisions are rarely perfectly elastic — some kinetic energy is lost to sound, heat and deformation. The coefficient of restitution e, ranging from 0 (perfectly inelastic, the two objects stick together and move at a shared velocity) to 1 (perfectly elastic, no energy lost), scales how much the relative normal velocity reverses:

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

That impulse-based formulation is what real-time physics engines actually implement: compute a single scalar impulse J along the normal from the relative approach velocity and the restitution coefficient, then apply it symmetrically according to each mass. It generalises immediately to friction (add a tangential impulse bounded by μJ), to rotation (apply the impulse at the contact point rather than the centre of mass, which imparts spin) and to resting contact (chains of small impulses resolved iteratively, since two objects can't just interpenetrate and un-interpenetrate cleanly every frame).

Conservation as the correctness check

The single most useful sanity check for any collision-response implementation is plotting total momentum and, for e = 1, total kinetic energy over time — both should stay flat to numerical precision. Momentum conservation is a hard constraint of the impulse formula above (the two impulses are exactly equal and opposite), so if a simulation shows momentum drifting, the bug is almost always in the geometry — using the wrong contact normal, or resolving the collision at the wrong moment relative to when the balls actually touch.

Frequently asked questions

Why do equal-mass balls swap velocities exactly in an elastic collision?

Setting m1 = m2 = m in the 1D elastic collision formula along the normal direction reduces v1n' to v2n and v2n' to v1n exactly — the two balls trade their normal velocity components completely, which is the physics behind why a stationary billiard ball shoots off with the incoming ball's speed while the incoming ball nearly stops.

What does a restitution coefficient of 0.5 mean physically?

It means the balls separate after the collision at half the relative speed they approached each other with — some kinetic energy along the line of impact was lost to heat, sound or deformation, while e = 1 preserves that relative speed exactly and e = 0 leaves the objects moving together with zero relative separation speed.

Why is only the normal velocity component changed in a frictionless collision?

Because the contact force between two smooth circular bodies acts purely along the line connecting their centres — there's no perpendicular force to alter the tangential motion, so that component simply carries through the collision unchanged while all the physics happens along the normal.

Try it live

Everything above runs in your browser — open 2D Collisions and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.

▶ Open 2D Collisions simulation

What did you find?

Add reproduction steps (optional)