Monocurl Essays
Series Download

Momentum and collisions: what survives a crash

Momentum, impulse and Newton's third law, and how they fix the outcome of sticky and bouncy collisions when energy alone gives the wrong answer.

23 min·High school·

AssumesNewton's second law, F = ma: what force really doesConservation of energy: a roller coaster's bookkeeping

A 2 kg cart moving at 3 m/s runs into a 1 kg cart at rest and the two latch together, shown at half speed. The bar splits the total momentum, 6 kg·m/s, between the carts: the split changes at the collision and the total does not.
Monocurl source
let C = [2, 1, 3, 0, 0.6, 2.7, 0]
let X0 = -3.4
let PER = 1.36
mesh track = Track(X0, PER, 0, 5, 0.2, "position (m)")
mesh names = LabNames
mesh lab = Lab(C, t: 0, X0, PER, 0.2)

slide "crash"
    play Wait(0.6)
    lab.t = 1.5
    play Lerp(3, [&lab], linear)
    play Wait(1.4)

Uses the shared definitions for this lesson's figures.

A 2 kg cart rolls along a level track at 3 m/s and runs into a 1 kg cart that is standing still. Strips of Velcro on the bumpers make them latch together. How fast does the pair move afterward?

The last lesson suggests a method. The moving cart has kinetic energy $\tfrac12 mv^2 = \tfrac12(2)(3)^2 = 9$ J. If energy is conserved, the 3 kg pair has 9 J afterward, so $\tfrac12(3)v^2 = 9$ and $v = 2.45$ m/s. Run the experiment and the pair moves off at 2.00 m/s, every time. The energy method is off by more than a fifth, and the kinetic energy afterward is $\tfrac12(3)(2)^2 = 6$ J: a third of it has gone missing in a collision that takes less than a tenth of a second.

So kinetic energy does not survive this crash. But the outcome is the same on every run, so some rule fixes it, and the way to find the rule is to look for a quantity that does survive.

Four collisions, and a search for what stays the same

Keep the same two carts, A with mass 2 kg and B with mass 1 kg, on a track with so little friction that a cart given a push keeps its speed for the length of the track. Take positions along the track as $x$, increasing to the right, so that a velocity is positive for motion to the right and negative for motion to the left. We can change the bumpers (Velcro, or springs that make the carts bounce apart) and the starting velocities. Here are four runs.

RunBumpersA beforeB beforeA afterB after
1Velcro$+3$ m/s$0$$+2$ m/s$+2$ m/s
2springs$+3$ m/s$0$$+1$ m/s$+4$ m/s
3Velcro$+3$ m/s$-3$ m/s$+1$ m/s$+1$ m/s
4springs$+3$ m/s$-3$ m/s$-1$ m/s$+5$ m/s
Run 2 at half speed: the same carts with spring bumpers. Cart A slows from 3 m/s to 1 m/s, cart B leaves at 4 m/s, and the total momentum is 6 kg·m/s before and after.
Monocurl source
let C = [2, 1, 3, 0, 0.6, 2.7, 1]
let X0 = -3.4
let PER = 1.36
mesh track = Track(X0, PER, 0, 5, 0.2, "position (m)")
mesh names = LabNames
mesh lab = Lab(C, t: 0, X0, PER, 0.2)

slide "bounce"
    play Wait(0.6)
    lab.t = 1.08
    play Lerp(2.16, [&lab], linear)
    play Wait(1.6)

Uses the shared definitions for this lesson's figures.

Pause and try

For each run, compute three candidate totals before and after the collision: the sum of the velocities, the sum of mass times velocity, and the sum of $\tfrac12 \times$ mass $\times$ velocity squared. Which total is the same before and after in all four runs?

Show answerHide answer

Sum of velocities: $3 \to 4$, $3 \to 5$, $0 \to 2$, $0 \to 4$. It changes every time. Sum of $mv$ (in kg·m/s): run 1, $6 + 0 \to 4 + 2$; run 2, $6 + 0 \to 2 + 4$; run 3, $6 - 3 \to 2 + 1$; run 4, $6 - 3 \to -2 + 5$. It is 6, 6, 3 and 3 before, and the same after. Sum of $\tfrac12 mv^2$ (in J): $9 \to 6$, $9 \to 9$, $13.5 \to 1.5$, $13.5 \to 13.5$. It survives with spring bumpers and not with Velcro.

The sum of mass times velocity is unchanged in every run, whatever the bumpers are made of, provided we keep the signs: in run 4, cart A ends up moving left and contributes $-2$. The reason has to come from Newton’s laws, since those govern the carts at every instant, including the instants of contact that the table skips.

Impulse: what a force does over a time

In the last lesson we asked what a force accomplishes over a distance, and the answer was a change in $\tfrac12 mv^2$. Ask the same question about a force acting for a time.

Suppose a constant net force $F$ acts on an object of mass $m$ for a time $\Delta t$. By Newton’s second law the acceleration is $a = F/m$, and with constant acceleration the velocity changes by $\Delta v = a\,\Delta t$. Multiply by $m$:

$$ m\,\Delta v = F\,\Delta t. $$

The left side is the change in $mv$, the combination that the table singled out.

During a collision the force is far from constant. The repair is the one used for work in the last lesson: cut the contact time into slices so short that the force hardly changes during each, apply the theorem to each slice, and add. The momentum changes add up to the total change, and the impulses add up to the area under the graph of force against time. Making “hardly changes” exact is a limit that belongs to integral calculus; for a force that is constant on each of a finite number of slices the result is fully proved, and that is the form we use.

One consequence is already useful. A given change of momentum can be delivered by a large force briefly or a small force for longer, since only the product $F\,\Delta t$ is fixed. Airbags and crumple zones work by lengthening $\Delta t$.

The third law makes the total constant

Now look inside the collision of run 2. With spring bumpers of realistic stiffness, the carts are in contact for about 60 thousandths of a second.

Each cart feels three forces. Its weight and the normal force from the track are vertical and cancel, since the cart has no vertical acceleration. The third is the push of the other cart’s bumper, which is horizontal. Newton’s third law says that these two pushes are equal in size and opposite in direction at every instant: if A pushes B forward with force $F$, then B pushes A backward with force $-F$.

The forces on the two carts while their bumpers touch, each drawn from the cart's center. Each weight is canceled by a normal force. The two contact forces are a third-law pair.
The forces on the two carts while their bumpers touch, each drawn from the cart’s center. Each weight is canceled by a normal force. The two contact forces are a third-law pair.
Monocurl source
let Y = -1.45
let W = 1.9
let H = 1.8
let U = 0.75 / 19.6
let CA = [-2.15, Y + 0.14 + H / 2, 0]
let CB = [-0.25, Y + 0.14 + H / 2, 0]
mesh ground = Seg([-3.8, Y, 0], [1.4, Y, 0], SLATE, 3)
mesh carts = [
    Pt([CA[0] - 0.55, Y + 0.09, 0], INK, 0.09), Pt([CA[0] + 0.55, Y + 0.09, 0], INK, 0.09),
    Pt([CB[0] - 0.55, Y + 0.09, 0], INK, 0.09), Pt([CB[0] + 0.55, Y + 0.09, 0], INK, 0.09),
    Box(CA, [W, H], AZURE, 0.18, 2.5),
    Box(CB, [W, H], EMBER, 0.18, 2.5),
    center{[CA[0], CA[1] + H / 2 + 0.3, 0]} Cap("A", 0.8, AZURE),
    center{[CB[0], CB[1] + H / 2 + 0.3, 0]} Cap("B", 0.8, EMBER)
]
mesh vertical = [
    Arrow2(CA, [0, -U * 19.6, 0], SLATE, 3.5),
    Arrow2(CA, [0, U * 19.6, 0], SLATE, 3.5),
    Arrow2(CB, [0, -U * 9.8, 0], SLATE, 3.5),
    Arrow2(CB, [0, U * 9.8, 0], SLATE, 3.5),
    center{CA + [0.5, 0.5, 0]} Math("19.6\text{ N}", 0.76, SLATE),
    center{CA + [0.5, -0.5, 0]} Math("19.6\text{ N}", 0.76, SLATE),
    center{CB + [-0.45, 0.3, 0]} Math("9.8\text{ N}", 0.76, SLATE),
    center{CB + [-0.45, -0.3, 0]} Math("9.8\text{ N}", 0.76, SLATE)
]
mesh pair = [
    Arrow2(CA, [-1.5, 0, 0], AZURE, 5.5),
    Arrow2(CB, [1.5, 0, 0], EMBER, 5.5),
    Pt(CA, AZURE, 0.07),
    Pt(CB, EMBER, 0.07),
    center{CA + [-1.3, 0.38, 0]} Math("-F", 0.9, AZURE),
    center{CB + [1.25, 0.38, 0]} Math("+F", 0.9, EMBER)
]
mesh rows = [
    center{[2.75, 1.6, 0]} Note("vertical, each cart", 0.74),
    center{[2.75, 1.1, 0]} Math("N - mg = 0", 0.92),
    center{[2.75, 0.3, 0]} Note("push on A, on B", 0.74),
    center{[2.75, -0.2, 0]} Math("-F \qquad +F", 0.92),
    center{[2.75, -1.0, 0]} Note("sum of the pair", 0.74),
    center{[2.75, -1.5, 0]} Math("0", 0.95, LEAF)
]

Uses the shared definitions for this lesson's figures.

The two pushes also last exactly as long as each other, because they are two descriptions of one contact. So in every slice of time the impulse on A is minus the impulse on B, and whatever momentum B gains, A loses.

  1. Cart A’s bumper pushes cart B forward with a force that rises to 105 N and falls back to zero. The velocities change meanwhile.
  2. At every instant cart B pushes cart A backward with the same strength, so the blue curve is the mirror image.
  3. The area under each curve is the impulse: 4.0 N·s forward on B and 4.0 N·s backward on A.
  4. Each velocity changes by impulse over mass. The 1 kg cart gains 4 m/s and the 2 kg cart loses 2 m/s.
Run 2 slowed down, with the spring bumpers modeled as an ideal spring. Left: the force on each cart during the 60 ms of contact. Right: the two velocities. The forces are mirror images, so the impulses are equal and opposite.
Monocurl source
let T = 60
let FMAX = 3 * (2 / 3) * PI / 0.06
let fb = |t| FMAX * sin(PI * t / T)
let fa = |t| -fb(t)
let ff = Frame(0, 60, -120, 120, [-1.55, 0.05, 0], 2.7, 2.75)
let fv = Frame(0, 60, 0, 4.5, [2.1, 0.05, 0], 2.7, 2.75)
mesh panels = [
    Panel(ff, [20, 40, 60], [-100, -50, 50, 100], [0, 20, 40, 60], [-100, -50, 0, 50, 100], "time in contact (ms)", "force on each cart (N)"),
    Panel(fv, [20, 40, 60], [1, 2, 3, 4], [0, 20, 40, 60], [0, 1, 2, 3, 4], "time in contact (ms)", "velocity (m/s)")
]
mesh area_b = []
mesh area_a = []
mesh curve_b = []
mesh curve_a = []
mesh tags = []
mesh vels = [
    Graph(fv, |t| 2 + cos(PI * t / T), 0, T, AZURE, 4, 60),
    Graph(fv, |t| 2 - 2 * cos(PI * t / T), 0, T, EMBER, 4, 60),
    center{at(fv, 48, 1.75)} Cap("A", 0.76, AZURE),
    center{at(fv, 12, 1.0)} Cap("B", 0.76, EMBER)
]
mesh deltas = []

slide "Cart A's bumper pushes cart B forward with a force that rises to 105 N and falls back to zero. The velocities change meanwhile."
    curve_b = Graph(ff, fb, 0, T, EMBER, 4, 60)
    tags = [center{at(ff, 11, 98)} Cap("on B", 0.76, EMBER)]
    play Fade(0.8)

slide "At every instant cart B pushes cart A backward with the same strength, so the blue curve is the mirror image."
    curve_a = Graph(ff, fa, 0, T, AZURE, 4, 60)
    tags .= center{at(ff, 11, -98)} Cap("on A", 0.76, AZURE)
    play Fade(0.8)

slide "The area under each curve is the impulse: 4.0 N·s forward on B and 4.0 N·s backward on A."
    area_b = AreaUnder(ff, fb, 0, T, EMBER, 0.3, 60)
    area_a = AreaUnder(ff, fa, 0, T, AZURE, 0.3, 60)
    tags .= center{at(ff, 30, 45)} Math(str_join(["+", to_string(FMAX * 0.06 * 2 / PI, 1)]), 0.85, EMBER)
    tags .= center{at(ff, 30, -45)} Math(str_join(["-", to_string(FMAX * 0.06 * 2 / PI, 1)]), 0.85, AZURE)
    play Fade(0.8)

slide "Each velocity changes by impulse over mass. The 1 kg cart gains 4 m/s and the 2 kg cart loses 2 m/s."
    deltas = [
        center{at(fv, 17, 3.5)} Math("\Delta v_B = +4", 0.8, EMBER),
        center{at(fv, 43, 0.5)} Math("\Delta v_A = -2", 0.8, AZURE)
    ]
    play Fade(0.8, [&deltas])

Uses the shared definitions for this lesson's figures.

The figure models the bumper as an ideal spring, which gives the force its smooth hump. Rubber, Velcro or crumpling steel would give other curves, and in each case the curve for A would be the mirror image of the curve for B.

Nothing was assumed about the nature of the force $F$, which is why Velcro and springs obey the same rule. If the net external force is not zero, the same proof shows that the total momentum changes by the external impulse, $F_{\text{ext}}\,\Delta t$. For more than two objects the internal forces still cancel in third-law pairs, and the theorem holds for the whole collection.

A real track has some friction, which is an external force. It does little harm, because the collision is so brief: a rolling friction force of 0.05 N acting for 0.06 s delivers 0.003 N·s, against the 4 N·s the carts exchange. Momentum conservation across a collision is an excellent approximation whenever the collision forces are much larger than the external ones.

Sticky collisions and the missing energy

With the law in hand, the opening question is one line. In a perfectly inelastic collision the objects move off together with a common velocity $v$. Let their masses be $m_1, m_2$ and their velocities beforehand $u_1, u_2$. Conservation of momentum gives $m_1 u_1 + m_2 u_2 = (m_1 + m_2)\,v$, so

$$ v = \frac{m_1 u_1 + m_2 u_2}{m_1 + m_2}. $$

For run 1, $v = (2 \times 3 + 0)/3 = 2$ m/s. For run 3, $v = (6 - 3)/3 = 1$ m/s. Both match the table.

Now the energy. Write $M = m_1 + m_2$. The kinetic energy before minus the kinetic energy after is

$$ K_i - K_f = \tfrac12 m_1 u_1^2 + \tfrac12 m_2 u_2^2 - \frac{(m_1 u_1 + m_2 u_2)^2}{2M}. $$

Put everything over $2M$. The numerator is $(m_1 u_1^2 + m_2 u_2^2)(m_1 + m_2) - (m_1 u_1 + m_2 u_2)^2$, and when it is multiplied out the terms $m_1^2 u_1^2$ and $m_2^2 u_2^2$ cancel, leaving $m_1 m_2\,(u_1^2 + u_2^2 - 2u_1 u_2)$. So

$$ K_i - K_f = \frac12\,\frac{m_1 m_2}{m_1 + m_2}\,(u_1 - u_2)^2. $$

This is never negative, and it is zero only if $u_1 = u_2$, in which case the objects never collide. Every sticky collision loses kinetic energy, and the amount depends only on the masses and the velocity of approach $u_1 - u_2$. For run 1 it is $\tfrac12 \cdot \tfrac{2}{3} \cdot 3^2 = 3$ J, the 3 J that went missing at the start. For run 3 it is $\tfrac12 \cdot \tfrac23 \cdot 6^2 = 12$ J, which is $13.5 - 1.5$.

The energy has gone into deforming the bumpers, into sound, and mostly into thermal energy. You might object that this is suspicious: the internal forces cancel well enough to leave momentum alone, so why do they not leave energy alone? The answer is that the two pushes act for the same time and not over the same distance. While the bumpers are being crushed the gap between the carts is closing, so cart A travels farther than cart B. The force slows A over a longer distance than it speeds B up, and A loses more kinetic energy than B gains. Impulse is force times time, and cancels. Work is force times distance, and need not.

Bouncy collisions: two conditions, two unknowns

When the carts separate after the collision there are two unknown velocities, $v_1$ and $v_2$, and momentum conservation is only one equation. A second condition has to come from what the bumpers are made of.

The cleanest case is the one where no kinetic energy is lost. A collision is elastic if the total kinetic energy is the same after as before. Steel balls and good spring bumpers come close, and runs 2 and 4 are elastic, as their 9 J and 13.5 J totals showed.

For an elastic collision we have

$$ m_1 u_1 + m_2 u_2 = m_1 v_1 + m_2 v_2, \qquad \tfrac12 m_1 u_1^2 + \tfrac12 m_2 u_2^2 = \tfrac12 m_1 v_1^2 + \tfrac12 m_2 v_2^2. $$

The second equation is quadratic, and substitution is unpleasant. A better route is to collect the terms for each object on one side:

$$ m_1 (u_1 - v_1) = m_2 (v_2 - u_2), \qquad m_1 (u_1^2 - v_1^2) = m_2 (v_2^2 - u_2^2). $$

Each side of the second equation is a difference of squares, and it contains the corresponding side of the first as a factor: $u_1^2 - v_1^2 = (u_1 - v_1)(u_1 + v_1)$. Divide the second equation by the first. This is allowed when $u_1 \ne v_1$, that is, when the collision changes the velocities at all. What remains is $u_1 + v_1 = v_2 + u_2$, or

$$ v_1 - v_2 = -(u_1 - u_2). $$

In an elastic collision the relative velocity reverses: the objects separate at the speed with which they approached. Check run 2: approach at $3 - 0 = 3$ m/s, separation at $4 - 1 = 3$ m/s. (The excluded case, $v_1 = u_1$ and $v_2 = u_2$, also satisfies both conservation laws. It describes the carts passing through each other untouched.)

Now the problem is linear. Substitute $v_2 = v_1 + u_1 - u_2$ into the momentum equation and solve for $v_1$, then for $v_2$.

For run 4, $v_1 = \bigl((2 - 1)(3) + 2(1)(-3)\bigr)/3 = -1$ m/s and $v_2 = \bigl((1 - 2)(-3) + 2(2)(3)\bigr)/3 = +5$ m/s, as measured.

Pause and try

A moving object strikes an object at rest, elastically. Without the formulas, guess the outcome in three cases, then check each guess with $u_2 = 0$: (a) the masses are equal; (b) the moving object is far heavier, like a bowling ball hitting a ping-pong ball; (c) it is far lighter, the ping-pong ball hitting the bowling ball.

Show answerHide answer

With $u_2 = 0$: $v_1 = \dfrac{m_1 - m_2}{m_1 + m_2}u_1$ and $v_2 = \dfrac{2m_1}{m_1 + m_2}u_1$. (a) $m_1 = m_2$: $v_1 = 0$ and $v_2 = u_1$. The moving object stops dead and the other leaves with its velocity. (b) $m_1 \gg m_2$: $v_1 \approx u_1$ and $v_2 \approx 2u_1$. The heavy object barely notices, and the light one leaves at twice the heavy one’s speed, which most people do not guess. (c) $m_1 \ll m_2$: $v_1 \approx -u_1$ and $v_2 \approx 0$. The light object bounces back at nearly its original speed.

Three elastic collisions at half speed, each with a cart arriving at 2 m/s. Equal masses exchange velocities. A 10 kg cart barely slows and sends a 1 kg cart off at 3.6 m/s. A 1 kg cart bounces back from a 10 kg cart.
Monocurl source
let X0 = -3.3
let PER = 1.1
let LANES = [
    [[1, 1, 2, 0, 1.0, 2.6, 1], 0.85, "1 kg", "1 kg", 0.36, 0.36],
    [[10, 1, 2, 0, 1.0, 2.6, 1], -0.5, "10 kg", "1 kg", 0.5, 0.36],
    [[1, 10, 2, 0, 1.0, 2.6, 1], -1.85, "1 kg", "10 kg", 0.36, 0.5]
]
mesh tracks = block {
    for (ln in LANES) {
        . Seg([X0 - 0.25, ln[1], 0], [X0 + PER * 6 + 0.25, ln[1], 0], SLATE, 3)
        for (m in range(0, 7)) {
            . Seg([X0 + PER * m, ln[1] - 0.1, 0], [X0 + PER * m, ln[1], 0], SLATE, 2.5)
        }
    }
    . center{[X0 + 0.55, 2.06, 0]} Note("velocity (m/s)", 0.72)
    . center{[2.6, 2.06, 0]} Note("track marks every 1 m", 0.72)
}
let Race = |t| block {
    for (ln in LANES) {
        let s = run(ln[0], t)
        . Cart(X0 + PER * s[0], ln[1], GAP * PER, AZURE, ln[2], ln[4])
        . Cart(X0 + PER * s[1], ln[1], GAP * PER, EMBER, ln[3], ln[5])
        . VelTag(X0 + PER * s[0], ln[1] + 0.8, s[2], AZURE, 0)
        . VelTag(X0 + PER * s[1], ln[1] + 0.8, s[3], EMBER, 0)
    }
}
mesh race = Race(t: 0)

slide "three"
    play Wait(0.7)
    race.t = 1.45
    play Lerp(2.9, [&race], linear)
    play Wait(1.6)

Uses the shared definitions for this lesson's figures.

With masses 10 kg and 1 kg and $u_1 = 2$ m/s, case (b) gives $v_1 = \tfrac{9}{11}(2) = 1.64$ m/s and $v_2 = \tfrac{20}{11}(2) = 3.64$ m/s, and case (c) gives $v_1 = -1.64$ m/s and $v_2 = \tfrac{2}{11}(2) = 0.36$ m/s.

Most real collisions lie between the two extremes: the objects separate, more slowly than they approached. Momentum conservation still holds, and the second condition must be measured.

The center of mass does not notice the collision

Momentum conservation says $m_1 v_1 + m_2 v_2$ is constant. Divide by the total mass and it says that a certain average velocity is constant. That average is the velocity of a definite point.

If the objects move for a time $\Delta t$ with velocities $v_1, v_2$, their positions change by $v_1\Delta t$ and $v_2\Delta t$, so $x_{\text{cm}}$ changes by $(m_1 v_1 + m_2 v_2)\,\Delta t/(m_1 + m_2)$. The velocity of the center of mass is therefore

$$ v_{\text{cm}} = \frac{m_1 v_1 + m_2 v_2}{m_1 + m_2} = \frac{p_{\text{total}}}{M}. $$

Since $p_{\text{total}}$ is constant when no net external force acts, so is $v_{\text{cm}}$. The carts change velocity abruptly, and the center of mass moves through the collision at a steady velocity. For runs 1 and 2 it is $6/3 = 2$ m/s throughout. The common velocity after a perfectly inelastic collision is exactly $v_{\text{cm}}$, because once the carts are stuck together the center of mass moves with them.

Run 2 at one third speed, with the position of each cart’s center plotted against time. The green marker is the center of mass. Both carts change velocity at the collision; the center of mass keeps a straight line of slope 2 m/s.
Monocurl source
let C = [2, 1, 3, 0, 0.6, 2.7, 1]
let X0 = -3.4
let PER = 1.36
let TEND = 1.08
let fg = Frame(0, 1.2, 0, 5, [0.15, -0.58, 0], 5.6, 1.5)
let cm = |s| (2 * s[0] + s[1]) / 3
mesh track = Track(X0, PER, 0, 5, 1.22)
mesh cmname = center{at(fg, 0.93, 0.5)} Cap("center of mass: 2 m/s", 0.74, LEAF)
mesh plot = Panel(fg, [0.2, 0.4, 0.6, 0.8, 1.0, 1.2], [1, 2, 3, 4, 5], [0, 0.2, 0.4, 0.6, 0.8, 1, 1.2], [0, 1, 2, 3, 4, 5], "time (s)", "position (m)")
let Trace = |t, k, col| {
    let n = to_int(max(2, ceil(t * 40)))
    return stroke{col, 3.5} Polyline(map(sample(0, max(t, 0.02), n), |u| {
        let s = run(C, u)
        return at(fg, u, [s[0], s[1], cm(s)][k])
    }))
}
let Go = |t| {
    let s = run(C, t)
    let xc = X0 + PER * cm(s)
    return [
        Trace(t, 0, AZURE), Trace(t, 1, EMBER), Trace(t, 2, LEAF),
        Cart(X0 + PER * s[0], 1.22, GAP * PER, AZURE, "2 kg", 0.36),
        Cart(X0 + PER * s[1], 1.22, GAP * PER, EMBER, "1 kg", 0.36),
        fill{LEAF} stroke{LEAF, 1} Polygon([[xc, 1.82, 0], [xc - 0.12, 2.02, 0], [xc + 0.12, 2.02, 0]]),
        Pt(at(fg, t, s[0]), AZURE, 0.07), Pt(at(fg, t, s[1]), EMBER, 0.07), Pt(at(fg, t, cm(s)), LEAF, 0.07)
    ]
}
mesh go = Go(t: 0)

slide "steady"
    play Wait(0.6)
    go.t = TEND
    play Lerp(3 * TEND, [&go], linear)
    play Wait(1.6)

Uses the shared definitions for this lesson's figures.

So watch the collision from a camera that rides along with the center of mass. Changing to an observer who moves at a constant velocity $V$ subtracts $V$ from every velocity and leaves every force and every acceleration unchanged, so Newton’s laws hold for that observer as well. In the frame moving at $v_{\text{cm}} = 2$ m/s, cart A approaches at $3 - 2 = +1$ m/s and cart B at $0 - 2 = -2$ m/s. Their momenta are $+2$ and $-2$ kg·m/s, total zero.

Pause and try

In this frame the total momentum is zero before the collision, so it is zero after. What does that force a sticky collision to look like? And an elastic one, given that the relative velocity reverses?

Show answerHide answer

Sticky: the pair has a common velocity $v$ and momentum $3v = 0$, so $v = 0$. Both carts stop dead, and all the kinetic energy in this frame, $\tfrac12(2)(1)^2 + \tfrac12(1)(2)^2 = 3$ J, is lost. Elastic: total momentum zero requires $2v_A + v_B = 0$, and reversal requires $v_A - v_B = -3$. So $v_A = -1$ and $v_B = +2$: each cart leaves with its velocity reversed. Adding 2 m/s back gives $+1$ and $+4$ m/s in the track’s frame, which is run 2.

Runs 1 and 2 seen by an observer moving with the center of mass, at half speed. With Velcro both carts stop and the 3 J of kinetic energy in this frame is lost; with springs each reverses and the 3 J is kept. The green marker is the center of mass, which stays where it is.
Monocurl source
let X0 = -0.75
let PER = 1.15
let TC = 0.9
let cfg = |e| [2, 1, 1, -2, -GAP / 3 - TC, 2 * GAP / 3 + 2 * TC, e]
let LANES = [[cfg(0), 0.42, "Velcro"], [cfg(1), -1.62, "springs"]]
mesh tracks = block {
    for (ln in LANES) {
        . Seg([X0 - 2 * PER - 0.2, ln[1], 0], [X0 + 3 * PER + 0.2, ln[1], 0], SLATE, 3)
        for (m in range(-2, 4)) {
            . Seg([X0 + PER * m, ln[1] - 0.1, 0], [X0 + PER * m, ln[1], 0], SLATE, 2.5)
        }
        . center{[-3.05, ln[1] + 1.2, 0]} Cap(ln[2], 0.76, SLATE)
        . center{[3.1, ln[1] + 1.2, 0]} Note("kinetic energy (J)", 0.72)
        . fill{LEAF} stroke{LEAF, 1} Polygon([[X0, ln[1] - 0.04, 0], [X0 - 0.11, ln[1] - 0.24, 0], [X0 + 0.11, ln[1] - 0.24, 0]])
    }
    . center{[0, 2.06, 0]} Note("velocity in the moving frame (m/s)", 0.72)
}
let View = |t| block {
    for (ln in LANES) {
        let s = run(ln[0], t)
        . Cart(X0 + PER * s[0], ln[1], GAP * PER, AZURE, "2 kg")
        . Cart(X0 + PER * s[1], ln[1], GAP * PER, EMBER, "1 kg")
        . VelTag(X0 + PER * s[0], ln[1] + 1.2, s[2], AZURE)
        . VelTag(X0 + PER * s[1], ln[1] + 1.2, s[3], EMBER)
        . center{[3.15, ln[1] + 0.7, 0]} scale{1.15} color{INK} Number(s[2] * s[2] + 0.5 * s[3] * s[3], 1)
    }
}
mesh view = View(t: 0)

slide "frame"
    play Wait(0.7)
    view.t = 2 * TC
    play Lerp(4 * TC, [&view], linear)
    play Wait(1.4)

Uses the shared definitions for this lesson's figures.

This view explains the energy-loss formula. In the track’s frame the pair must keep moving at $v_{\text{cm}}$ after any collision, so the kinetic energy of that shared motion, $\tfrac12 M v_{\text{cm}}^2 = \tfrac12(3)(2)^2 = 6$ J, can never be lost. Only the remaining 3 J, the kinetic energy of the motion relative to the center of mass, is available, and a sticky collision loses all of it. That 3 J is $\tfrac12 \frac{m_1 m_2}{m_1 + m_2}(u_1 - u_2)^2$, the amount computed earlier.

Worked examples

Limits and common mistakes

Conservation of momentum has one hypothesis, zero net external force, and it is a statement about a system you choose. A ball bouncing off a wall changes its own momentum from $mv$ to nearly $-mv$, because the wall pushes on it. Include the wall and the Earth it is attached to, and the total is conserved: the Earth recoils with momentum $2mv$, at a speed far too small to detect.

Everything here was along one line. In two or three dimensions momentum is a vector, the proof runs unchanged for each component, and each component is conserved separately. The elastic formulas are for head-on collisions only.

Check yourself

A 3 kg cart moving at 2 m/s collides with a 1 kg cart at rest and they stick together. Which statement about the collision is correct?

The next lesson returns to a single object, on a spring whose force lasts as long as the motion does and pulls the object back and forth.

Problems

Take the first object’s initial direction of motion as positive, and use $g = 9.8$ m/s².

Problem 1

A 70 kg driver traveling at 15 m/s is brought to rest in a crash. Find the impulse on the driver, and the average force if the stop takes (a) 0.005 s against a rigid dashboard, (b) 0.1 s against an airbag.

Show solutionHide solution

$\Delta p = 70 \times (0 - 15) = -1050$ kg·m/s, the same in both cases. (a) $F = -1050/0.005 = -210\,000$ N. (b) $F = -1050/0.1 = -10\,500$ N. The airbag does not reduce the impulse, which is fixed by the change in momentum. It spreads the impulse over twenty times as long, so the force is twenty times smaller. The minus signs say the force is directed against the initial motion.

Problem 2

A 0.4 kg lump of clay moving at 5 m/s hits a 1.6 kg block at rest on a frictionless table and sticks. Find the final velocity and the fraction of the kinetic energy lost.

Show solutionHide solution

Momentum: $0.4 \times 5 = (0.4 + 1.6)\,v$, so $v = 1$ m/s. Kinetic energy before: $\tfrac12(0.4)(25) = 5$ J. After: $\tfrac12(2)(1) = 1$ J. Lost: 4 J, which is 80%. Check with the formula: $\tfrac12 \cdot \tfrac{0.4 \times 1.6}{2} \cdot 5^2 = \tfrac12(0.32)(25) = 4$ J.

Problem 3

A 0.5 kg glider moving at 4 m/s collides elastically with a 1.5 kg glider at rest. Find both velocities afterward, and verify that momentum and kinetic energy are conserved.

Show solutionHide solution

With $u_2 = 0$: $v_1 = \dfrac{0.5 - 1.5}{2}(4) = -2$ m/s and $v_2 = \dfrac{2(0.5)}{2}(4) = +2$ m/s. Momentum: before $0.5 \times 4 = 2$; after $0.5(-2) + 1.5(2) = -1 + 3 = 2$ kg·m/s. Kinetic energy: before $\tfrac12(0.5)(16) = 4$ J; after $\tfrac12(0.5)(4) + \tfrac12(1.5)(4) = 1 + 3 = 4$ J. The relative velocity went from $+4$ to $-4$ m/s.

Problem 4

A 60 kg skater at rest on frictionless ice throws a 4 kg ball horizontally at 6 m/s relative to the ice. (a) Find the skater’s velocity afterward. (b) Find the total kinetic energy before and after. Where did it come from? (c) Where is the center of mass of the skater and ball 2 s after the throw, relative to where it started?

Show solutionHide solution

(a) The total momentum is zero before, so $60v + 4 \times 6 = 0$ and $v = -0.4$ m/s: the skater recoils. (b) Before: 0. After: $\tfrac12(60)(0.16) + \tfrac12(4)(36) = 4.8 + 72 = 76.8$ J. It came from chemical energy in the skater’s muscles. Internal forces cannot change the total momentum, and they can change the total kinetic energy; this is a sticky collision run backward. (c) $v_{\text{cm}} = p_{\text{total}}/M = 0$, so the center of mass has not moved. Check: after 2 s the skater is at $-0.8$ m and the ball at $+12$ m, and $(60 \times (-0.8) + 4 \times 12)/64 = 0$.

Problem 5

(Ballistic pendulum.) A 10 g bullet is fired horizontally into a 2 kg wooden block hanging at rest from long strings, and stays in it. The block swings up until its center has risen 5 cm. (a) Find the bullet’s speed. (b) A student writes $\tfrac12 m v^2 = (m + M)gh$ for the whole process and gets 14 m/s. What is wrong with that?

Show solutionHide solution

Split the process into two stages. Swing: after the bullet has stopped inside the block, only gravity does work (the string tension is perpendicular to the motion), so mechanical energy is conserved: $\tfrac12 (m + M) V^2 = (m + M) g h$, giving $V = \sqrt{2 \times 9.8 \times 0.05} = 0.990$ m/s just after the impact. Impact: it is over before the block has moved appreciably, so the strings are still vertical and exert no horizontal force, and horizontal momentum is conserved: $m v = (m + M)V$, so $v = 2.01 \times 0.990 / 0.010 = 199$ m/s. (b) The student conserved kinetic energy through a perfectly inelastic collision. The fraction of kinetic energy lost in the impact is $M/(m + M) = 2/2.01 = 99.5\%$, so the equation is wrong by a factor of about 200 in energy, and by $\sqrt{201} \approx 14$ in speed.

Problem 6

An object of mass $m_1$ moving at $u_1$ collides elastically with an object of mass $m_2$ at rest. (a) Show that the fraction of the first object’s kinetic energy that is transferred to the second is $\dfrac{4 m_1 m_2}{(m_1 + m_2)^2}$. (b) Show that this fraction is at most 1, with equality exactly when the masses are equal. (c) Nuclear reactors slow fast neutrons by letting them collide with light nuclei. Compare the fraction transferred per head-on collision with a hydrogen nucleus (mass about equal to the neutron’s) and with a lead nucleus (about 207 neutron masses).

Show solutionHide solution

(a) $v_2 = \dfrac{2m_1}{m_1 + m_2}u_1$, so the second object’s kinetic energy is $\tfrac12 m_2 v_2^2 = \tfrac12 m_2 \dfrac{4m_1^2}{(m_1 + m_2)^2}u_1^2$. Divide by $\tfrac12 m_1 u_1^2$ to get $\dfrac{4m_1 m_2}{(m_1 + m_2)^2}$. (b) $(m_1 + m_2)^2 - 4m_1 m_2 = (m_1 - m_2)^2 \ge 0$, so $4m_1 m_2 \le (m_1 + m_2)^2$, with equality exactly when $m_1 = m_2$. (c) Hydrogen: $4(1)(1)/2^2 = 1$, all of the energy in one head-on collision. Lead: $4(207)/208^2 = 828/43\,264 = 0.019$, under 2%. This is why reactors use water or graphite as moderators, and not lead.

Shared definitions used by this lesson's figures
# house kit: prepended to every essay figure after the std imports

# palette. AZURE and EMBER are the two actors, LEAF marks an answer, ROSE a problem
let PAPER = [1, 1, 1, 1]
let INK = [0.08, 0.09, 0.11, 1]
let SLATE = [0.40, 0.44, 0.50, 1]
let MIST = [0.85, 0.86, 0.88, 1]
let AZURE = [0.13, 0.42, 0.68, 1]
let EMBER = [0.89, 0.42, 0.12, 1]
let LEAF = [0.13, 0.55, 0.36, 1]
let ROSE = [0.78, 0.22, 0.24, 1]
let PLUM = [0.47, 0.30, 0.66, 1]
let GOLD = [0.85, 0.62, 0.08, 1]

background = PAPER

# an opaque pastel of col; use for fills so overlaps do not darken
let tint = |col, amount = 0.18| [
    1 - (1 - col[0]) * amount,
    1 - (1 - col[1]) * amount,
    1 - (1 - col[2]) * amount,
    1
]

# text: Cap for labels, Note for quiet labels, Math for typeset maths
let Cap = |txt, size = 0.75, col = INK| color{col} Text(txt, size, "Charter")
let Note = |txt, size = 0.65| color{SLATE} Text(txt, size, "Charter")
let Math = |tex, size = 0.9, col = INK| color{col} Tex(tex, size)

# a paper rectangle to sit behind text that crosses lines
let Plate = |pos, size| center{pos} fill{PAPER} stroke{alpha{0} PAPER, 0} Rect(size)

# shapes with fill and stroke both set, so no stray black appears
let Pt = |pos, col = INK, r = 0.075| center{pos} fill{col} stroke{col, 1} Circle(r, 48)
let Ring = |pos, col = INK, r = 0.1, w = 3| center{pos} fill{PAPER} stroke{col, w} Circle(r, 48)
let Seg = |a, b, col = INK, w = 3| stroke{col, w} Line(a, b)
let Path = |pts, col = INK, w = 3| stroke{col, w} Polyline(pts)
let Region = |pts, col| fill{col} stroke{alpha{0} col, 0} Polygon(pts)
let Outline = |pts, col = INK, w = 3| fill{alpha{0} PAPER} stroke{col, w} Polygon(pts)
let Shape = |pts, col, amount = 0.18, w = 3| fill{tint(col, amount)} stroke{col, w} Polygon(pts)
let Disc = |pos, r, col, amount = 0.18, w = 3| center{pos} fill{tint(col, amount)} stroke{col, w} Circle(r, 96)
let Box = |pos, size, col, amount = 0.18, w = 3| center{pos} fill{tint(col, amount)} stroke{col, w} Rect(size)
# a line from a to b ending in a small solid arrowhead
let Tip = |a, b, col = INK, w = 3, head = 0.17| {
    let d = normalize([b[0] - a[0], b[1] - a[1], 0])
    let n = [-d[1], d[0], 0]
    let base = [b[0] - d[0] * head, b[1] - d[1] * head, 0]
    return [
        stroke{col, w} Line(a, base),
        fill{col} stroke{col, 1} Polygon([
            b,
            [base[0] + n[0] * head * 0.42, base[1] + n[1] * head * 0.42, 0],
            [base[0] - n[0] * head * 0.42, base[1] - n[1] * head * 0.42, 0]
        ])
    ]
}

# plots. a frame is [x0, x1, y0, y1, centre, width, height]: a data window and the scene box it fills
let Frame = |x0, x1, y0, y1, c = [0, 0, 0], w = 6.4, h = 3.6| [x0, x1, y0, y1, c, w, h]
let fx = |fr, x| fr[4][0] + (x - (fr[0] + fr[1]) / 2) * fr[5] / (fr[1] - fr[0])
let fy = |fr, y| fr[4][1] + (y - (fr[2] + fr[3]) / 2) * fr[6] / (fr[3] - fr[2])
let at = |fr, x, y| [fx(fr, x), fy(fr, y), 0]

# axes through the data origin (or the nearest edge of the window), with optional names
let Axes = |fr, x_name = "", y_name = "", col = SLATE| {
    let ox = clamp(fr[0], 0, fr[1])
    let oy = clamp(fr[2], 0, fr[3])
    var parts = [
        Tip(at(fr, fr[0], oy), [fx(fr, fr[1]) + 0.25, fy(fr, oy), 0], col, 2.5, 0.15),
        Tip(at(fr, ox, fr[2]), [fx(fr, ox), fy(fr, fr[3]) + 0.25, 0], col, 2.5, 0.15)
    ]
    if (x_name != "") {
        parts .= center{[fx(fr, fr[1]) + 0.5, fy(fr, oy), 0]} Math(x_name, 0.8, col)
    }
    if (y_name != "") {
        parts .= center{[fx(fr, ox), fy(fr, fr[3]) + 0.5, 0]} Math(y_name, 0.8, col)
    }
    return parts
}

# tick marks with numbers at the listed data values
let XTicks = |fr, xs, col = SLATE, places = 0| block {
    let oy = fy(fr, clamp(fr[2], 0, fr[3]))
    for (x in xs) {
        . Seg([fx(fr, x), oy - 0.07, 0], [fx(fr, x), oy + 0.07, 0], col, 2)
        . center{[fx(fr, x), oy - 0.33, 0]} Math(to_string(x, places), 0.72, col)
    }
}
let YTicks = |fr, ys, col = SLATE, places = 0| block {
    let ox = fx(fr, clamp(fr[0], 0, fr[1]))
    for (y in ys) {
        . Seg([ox - 0.07, fy(fr, y), 0], [ox + 0.07, fy(fr, y), 0], col, 2)
        . center{[ox - 0.36, fy(fr, y), 0]} Math(to_string(y, places), 0.72, col)
    }
}

# faint grid lines at the listed data values
let GridLines = |fr, xs, ys, col = MIST| block {
    for (x in xs) {
        . Seg(at(fr, x, fr[2]), at(fr, x, fr[3]), col, 1.5)
    }
    for (y in ys) {
        . Seg(at(fr, fr[0], y), at(fr, fr[1], y), col, 1.5)
    }
}

# the graph of f over [a, b], drawn in the frame. values are clamped to the window
let Graph = |fr, f, a, b, col = AZURE, w = 4, n = 160|
    stroke{col, w} Polyline(map(sample(a, b, n), |x| at(fr, x, clamp(fr[2], f(x), fr[3]))))

# the region between the graph of f and the x axis over [a, b]
let AreaUnder = |fr, f, a, b, col = AZURE, amount = 0.2, n = 80| {
    var pts = [at(fr, a, 0)]
    for (x in sample(a, b, n)) {
        pts .= at(fr, x, clamp(fr[2], f(x), fr[3]))
    }
    pts .= at(fr, b, 0)
    return fill{tint(col, amount)} stroke{alpha{0} col, 0} Polygon(pts)
}

# plot furniture: grid, left and bottom edges, a zero line, numbers along the edges, names
let Panel = |f, gx, gy, lx, ly, xname, title, col = SLATE| block {
    . GridLines(f, gx, gy)
    if (f[2] < 0) {
        . Seg(at(f, f[0], 0), at(f, f[1], 0), SLATE, 2)
    }
    . Path([at(f, f[0], f[3]), at(f, f[0], f[2]), at(f, f[1], f[2])], SLATE, 2.5)
    for (x in lx) {
        . center{[fx(f, x), fy(f, f[2]) - 0.3, 0]} Math(to_string(x), 0.72, SLATE)
    }
    for (y in ly) {
        . center{[fx(f, f[0]) - 0.36, fy(f, y), 0]} Math(to_string(y), 0.72, SLATE)
    }
    if (xname != "") {
        . center{[(fx(f, f[0]) + fx(f, f[1])) / 2, fy(f, f[2]) - 0.64, 0]} Note(xname, 0.72)
    }
    . center{[(fx(f, f[0]) + fx(f, f[1])) / 2, fy(f, f[3]) + 0.3, 0]} Cap(title, 0.74, col)
}
let Arrow2 = |tail, vec, col, w = 4| Tip(tail, [tail[0] + vec[0], tail[1] + vec[1], 0], col, w, 0.18)

# two carts on a level track. lengths in meters; GAP is the distance between centers at contact
let GAP = 0.5
# c = [mass A, mass B, velocity A, velocity B, start A, start B, e]
# e = 0 for a sticky collision and 1 for an elastic one. returns [xA, xB, vA, vB] at time t
let run = |c, t| {
    let tc = (c[5] - c[4] - GAP) / (c[2] - c[3])
    if (t <= tc) { return [c[4] + c[2] * t, c[5] + c[3] * t, c[2], c[3]] }
    let total = c[0] + c[1]
    let vc = (c[0] * c[2] + c[1] * c[3]) / total
    let rel = c[2] - c[3]
    let va = vc - c[6] * c[1] / total * rel
    let vb = vc + c[6] * c[0] / total * rel
    let xc = c[4] + c[2] * tc
    return [xc + va * (t - tc), xc + GAP + vb * (t - tc), va, vb]
}
# a cart of scene width w whose wheels rest on the point (x, y)
let Cart = |x, y, w, col, name, tall = 0.44| [
    Pt([x - 0.28 * w, y + 0.07, 0], INK, 0.07),
    Pt([x + 0.28 * w, y + 0.07, 0], INK, 0.07),
    Box([x, y + 0.12 + tall / 2, 0], [w, tall], col, 0.3, 2.5),
    center{[x, y + 0.12 + tall / 2, 0]} Cap(name, 0.7, INK)
]
let tidy = |v| {
    if (abs(v) < 0.05) { return 0 }
    return v
}
# a velocity number centered at (x, y), with an arrow under it when arrow is set
let VelTag = |x, y, v, col, arrow = 1| {
    var out = [center{[x, y, 0]} scale{1.05} color{col} Number(tidy(v), 1)]
    if (arrow and abs(v) > 0.05) {
        out .= Arrow2([x - 0.125 * v, y - 0.36, 0], [0.25 * v, 0, 0], col, 4)
    }
    return out
}
# a track from lo to hi meters; meter m sits at scene x = x0 + per * m
let Track = |x0, per, lo, hi, y, name = ""| block {
    . Seg([x0 + per * lo - 0.25, y, 0], [x0 + per * hi + 0.25, y, 0], SLATE, 3)
    for (m in range(lo, hi + 1)) {
        . Seg([x0 + per * m, y - 0.1, 0], [x0 + per * m, y, 0], SLATE, 2.5)
        . center{[x0 + per * m, y - 0.32, 0]} Math(to_string(m), 0.72, SLATE)
    }
    if (name != "") {
        . center{[x0 + per * (lo + hi) / 2, y - 0.68, 0]} Note(name, 0.72)
    }
}
# a bar from x0 to x1 split into the two carts' momenta (both taken positive)
let MomBar = |pa, pb, x0, x1, y, h = 0.34| {
    let Part = |a, b, col| Region([[a, y - h / 2, 0], [b, y - h / 2, 0], [b, y + h / 2, 0], [a, y + h / 2, 0]], col)
    let mid = x0 + (x1 - x0) * pa / (pa + pb)
    var out = []
    if (mid - x0 > 0.02) { out .= Part(x0, mid, tint(AZURE, 0.75)) }
    if (x1 - mid > 0.02) { out .= Part(mid, x1, tint(EMBER, 0.8)) }
    out .= Outline([[x0, y - h / 2, 0], [x1, y - h / 2, 0], [x1, y + h / 2, 0], [x0, y + h / 2, 0]], SLATE, 2)
    return out
}
# carts, velocity tags and the momentum bar for a run c at time t
let Lab = |c, t, x0, per, y| {
    let s = run(c, t)
    return [
        MomBar(c[0] * s[2], c[1] * s[3], -2.6, 2.6, -1.1),
        Cart(x0 + per * s[0], y, GAP * per, AZURE, "2 kg"),
        Cart(x0 + per * s[1], y, GAP * per, EMBER, "1 kg"),
        VelTag(x0 + per * s[0], y + 1.2, s[2], AZURE),
        VelTag(x0 + per * s[1], y + 1.2, s[3], EMBER),
        center{[-0.45, -1.68, 0]} scale{1.1} color{AZURE} Number(c[0] * tidy(s[2]), 1),
        center{[3.25, -1.68, 0]} scale{1.1} color{EMBER} Number(c[1] * tidy(s[3]), 1)
    ]
}
let LabNames = [
    center{[0, 1.9, 0]} Note("velocity (m/s)", 0.72),
    center{[-2.15, -1.68, 0]} Cap("momentum of A (kg·m/s)", 0.72, AZURE),
    center{[1.55, -1.68, 0]} Cap("momentum of B (kg·m/s)", 0.72, EMBER)
]