The idea: two stages, two laws
A bullet of mass m flies at speed v into a wooden block of mass M that hangs on strings of length L. The bullet sticks, and the block swings up to a height h. What happens splits into two stages, and each stage keeps a different quantity:
- The hit lasts a split second. It keeps momentum: m·v = (m + M)·V, so the block starts moving at V = m·v/(m + M).
- The swing keeps energy: ½(m + M)·V² = (m + M)·g·h, so h = V²/2g.
Stage 1: the hit keeps momentum
The bullet stops inside the block in well under a millisecond. In that time the block barely moves, so the strings are still vertical and pull straight up: nothing outside pushes sideways. The bullet pushes the block forward and the block pushes the bullet back with an equal force for the same time, so the momentum the bullet loses is the momentum the block gains. With the default shot (Demo 1): p = 0.01·300 = 3 kg·m/s before and 2.01·V = 3 after, so V ≈ 1.49 m/s, about 200 times slower than the bullet. A heavier block gets the same momentum but moves off slower (Demo 2: 5 kg, V ≈ 0.60 m/s).
Where the energy goes
This is a perfectly inelastic collision, the sticky case (e = 0) of Elastic Collision. Kinetic energy is not kept. Put V into ½(m + M)V² and the energy left is exactly m/(m + M) of the bullet's ½mv². The rest, the fraction M/(m + M), goes into heat, sound and torn wood:
| shot | KE before | KE after the hit | lost = M/(m + M) |
|---|---|---|---|
| 10 g at 300 m/s into 2 kg (Demo 1) | 450 J | 2.24 J | 99.5 % |
| 10 g at 600 m/s into 2 kg (Demo 3) | 1800 J | 8.96 J | 99.5 % |
| 100 g at 20 m/s into 0.5 kg (Demo 5) | 20 J | 3.33 J | 83.3 % |
The loss depends only on the masses: a light bullet in a heavy block loses almost everything. That is why you cannot use energy across the hit: ½mv² = (m + M)·g·h would give a speed about 14 times too small.
Stage 2: the swing keeps energy
Now the strings tilt, and they and gravity push on the block, so momentum is no longer kept: at the top the block stops and p = 0. But the strings pull at right angles to the motion and do no work, so KE + PE stays the same. At the top all of it is PE: ½(m + M)V² = (m + M)·g·h. The masses cancel and h = V²/2g: 1.49²/19.6 ≈ 0.114 m. Twice the bullet speed gives twice V and four times the height (Demo 3: 45.5 cm).
The height does not depend on the strings, the angle does. The block rises h when L·(1 − cos θ) = h, so cos θ = 1 − h/L. With L = 1 m the default shot swings to about 27.6°; with L = 2 m it reaches the same 11.4 cm at only 19.4° (Demo 6). The two parallel strings keep the block level, so every point of it rises the same h.
Measuring a bullet's speed
Run both stages backwards and you can measure v without a clock. Read h, get V = √(2gh) from the swing, then v = (m + M)/m · V from the hit:
v = (m + M)/m · √(2gh)
For a 10 g bullet in a 2 kg block that rises 20.2 cm: v = 201 · √(2·9.8·0.202) ≈ 400 m/s (Demo 4). Benjamin Robins built the first ballistic pendulum in 1742 this way, long before anything could time a bullet directly.
Too fast: past 90°
If V²/2g is more than L the block would have to rise above the pivots. A string can only pull, so past 90° it goes slack and the block falls inside the circle, unless V² ≥ 5gL, when it is fast enough to go all the way round. The page stops the swing at 90° and says so (Demo 7: 50 g at 400 m/s into 2 kg gives V ≈ 9.76 m/s, h would be 4.86 m, and V² ≈ 95 ≥ 5gL = 49). Real ballistic pendulums use a heavy block so the swing stays small.
See also
The hit is the e = 0 case of Elastic and Inelastic Collisions, where you can also see the bouncy cases keep more energy. The swing after the hit is half a swing of the Simple Pendulum, which trades KE and PE back and forth.
What the page leaves out
The time the swing takes (the frames are spaced by angle, not by time; for big angles the exact time needs elliptic integrals), the block's rotation on a single string (two parallel strings keep it level), air drag and friction at the pivots, the tiny distance the block moves during the hit, the bullet's own path inside the wood, and what happens after the string goes slack. g is 9.8 m/s² and the menus keep the numbers in a range where the drawing stays readable.