workshop private

← all creations

Wrap

sprites · created 2026-09-29

184×134 pixel drum brake seen through the drum, with four loops. Two identical shoes, one cylinder, one pressure, and one of them does 2.14 times the work of the other — which is geometry, not lining. The equation has a zero in it where the brake grabs on its own, and the drum is standing in the only place you could put the hinge to reach it.

physicssimulationpixel-artcanvas

A disc brake is a clamp. You squeeze, it rubs, the rubbing is the braking, and the harder you squeeze the more you get. It is the machine you would design if someone described the problem to you over the phone.

A drum brake is not that. A drum brake is two curved shoes inside a spinning iron pot, and the drag does not only slow the drum — it also pushes the shoe, and where it pushes the shoe depends on which end of the shoe is bolted down. One of them gets pushed harder onto the drum by its own friction. The other gets peeled off by exactly the same force.

The sprite is one rear brake with the drum drawn transparent: two shoes, a wheel cylinder, an anchor pin, the lining pressure drawn on each shoe as the lobe it really is, and a road strip along the bottom with the car on it.

The shoe that helps itself

Hinge a shoe at one end, push it at the other. Now turn the drum.

If the drum’s surface sweeps from the pushed end toward the hinge, friction drags the shoe deeper in, and the deeper it goes the harder it is pressed, and the harder it is pressed the more it drags. That is a leading shoe, and it is self-energising. Turn the drum the other way and the same friction, on the same shoe, tries to lift it off its own hinge. That is a trailing shoe.

Nothing has changed except the direction of the drum.

How much, exactly

Take the standard long-shoe analysis: the lining presses with p = pa sin θ ⁄ sin θa over its arc, θ measured round from the hinge line. Drum bore radius r, hinge at radius R, lining from θ₁ to θ₂, actuating force applied a perpendicular distance c from the hinge. Two integrals fall out, and they are the whole of it:

K = cos θ₁ − cos θ₂                       J = sin²θ₂ − sin²θ₁

A = R·K − (r/2)·J        ← moment of the pressure about the hinge
B = r·K − (R/2)·J        ← moment of the friction about the hinge

The friction moment helps a leading shoe and fights a trailing one, so the force the cylinder has to supply is proportional to A − μB for one and A + μB for the other, while the torque they produce is the same formula for both. Divide one by the other and the whole brake collapses to a single dimensionless number per shoe — the shoe factor, torque out per unit of push, per drum radius:

S = μ K c / (A ∓ μB)        minus leading, plus trailing

On this brake — r = 114 mm, R = 126 mm, lining 12° to 128°, c = 226 mm — that is A = 167.889 mm and B = 145.297 mm, and at a cold μ of 0.42:

shoe factorpeak lining pressure
leading shoe1.4161.282 N/mm²
trailing shoe0.6610.599 N/mm²
ratio2.1422.142

Two identical shoes. One cylinder. One pressure. One of them does 2.14 times the work of the other, and the lining, the friction coefficient and the width of the shoe are not what decides it — they cancel out of the ratio entirely.

That ratio is the picture. The two pressure lobes in the sprite are drawn at p = pa sin θ ⁄ sin θa to one fixed scale, and because the same push has to be reacted by different pressure, the lobes come out in exactly the shoe-factor ratio. The orange one is the leading shoe. The violet one is the shoe that is only being pushed. You are not looking at an illustration of the number; you are looking at the number.

It is also why the two linings do not wear out together. They left the factory identical and the leading one is being pressed twice as hard, every stop, forever.

The zero, and the reason you can never reach it

Look at A − μB again. It has a zero in it.

Set A − μB = 0 and the cylinder needs no force at all: the shoe drags itself on and locks the wheel with your foot nowhere near the pedal. The threshold is

μ* = A / B

and there is no lining in it. No pressure, no width, no temperature. It is pure geometry — and this is the part worth the sprite.

Write x = R/r. The two integrals share their terms, so

μ* = (x·K − J/2) / (K − x·J/2)

At x = 1 the numerator and denominator are the same expression, so μ = 1 exactly*, whatever the lining arc is. Above x = 1 it rises monotonically (K, J > 0, and K − xJ/2 stays positive for any x short of 2K/J = 5.52).

So a hinged shoe grabs only if the hinge pin is inside the bore of the drum. There is a drum there. That is what a drum is.

On this geometry μ* = 1.1555, and the best lining anyone has ever bolted to a shoe is not close. Drag the hinge slider in the demo and watch it fall: 1.156 at R = 126, 1.000 at R = 114, 0.710 at R = 90 — where the pin is drawn in red because it is now standing in the middle of the iron.

Self-locking drum brakes are real, and this is why none of them is this one: they get there by chaining shoes together, not by hinging one cleverly.

What self-energisation actually costs

Take the log derivative of S and the amplification is one line:

d ln S / d ln μ  =  1 / (1 ∓ μB/A)

which on this brake is ×1.571 for the leading shoe and ×0.733 for the trailing one. The shoe that hands you the free torque is the shoe that hands it back fastest, and the shoe that looked weak is the one holding the brake’s behaviour together.

Which sets up the fourth loop. Hold 25 m/s down a 9% grade for six minutes on the brakes and 8.3 kW goes into a 6.5 kg lump of cast iron; after six minutes it is at 487 °C and still climbing, and the lining that was worth 0.42 is worth 0.251. That is a 40% loss of μ. The leading shoe gives back 51% of its factor. The stop, on the same pedal, goes from 58.5 m to 111.5 m — nearly double, with the pedal in exactly the place it was at the top of the pass, which is the part that kills people.

And the brake that is better is worse

If a leading shoe is worth 2.14 trailing shoes, build both of them leading. That is the two-leading-shoe brake: two single-acting cylinders diagonally opposite, each one’s body serving as the abutment for the other shoe. The sprite draws it — the anchor block at the bottom is gone and there is a second cylinder in its place.

It has two bills, and the sprite is the two loops that pay them.

One: it only works one way round. Roll backwards and both shoes trail. 2.831 becomes 1.322, a 53% loss, on a car that stops beautifully forwards. A leading-trailing brake has one of each, so its total is identical in both directions — which is the entire argument for putting it on the back axle of almost every car that ever had drums there, and for why the handbrake works on a hill you are rolling down.

Two: past a point, more brake factor is not more braking. The tyre on this corner can carry 3495 N and not one newton more. At 10 MPa of line pressure:

brake factortorqueat the roadstop
leading + trailing, forwards2.077900 N·m3000 N58.5 m
two leading, forwards2.8311227 N·m4089 N — over66.8 m, locked
two leading, backwards1.322573 N·m1910 N90.7 m
leading + trailing at 487 °C1.131490 N·m1633 N111.5 m

The strong brake stops 8.3 m later than the weak one. It asked the tyre for 4089 N, the tyre gave up at 3495, and a sliding tyre is worth 0.70 where a rolling one was worth 0.95. The 36% more brake factor bought a longer stop.

Hold it at the edge instead — press abs in the demo — and the same brake stops in 50.2 m. The extra factor was always there. There was just nothing in 1955 that could spend it.

The loops

loopframeswhat it is
lead8leading + trailing, forwards. 1.416 against 0.661, and the lobes to match.
twin6two leading shoes, forwards. Locks the wheel and stops 8.3 m later.
back6the same brake rolling backwards. Both shoes trail.
fade8leading + trailing at the bottom of the descent. 487 °C, and 111.5 m.

Reuse

source/wrap.mjs is framework-free and has no DOM in it above the drawing layer. The brake is separable from the sprite:

import { shoeFactor, selfLockMu, integrals, brakeTorque, cfgOf } from './wrap.mjs';

selfLockMu({ r: 114, R: 126, th1: 12, th2: 128 });   // 1.1555 — geometry only
shoeFactor(0.42, true);                              // 1.4157 leading
shoeFactor(0.42, false);                             // 0.6609 trailing
brakeTorque(cfgOf({ layout: '2ls' }), 0.42, 10);     // 1227 N·m

simulate(cfg, t) integrates the stop at 2 ms: pressure ramp, lining fade from drum temperature, tyre ceiling with latching lock-up, and the drum’s own thermal balance. stopTest(cfg) runs it to the end and reports.

Everything drawn is derived. validateGeometry() re-proves the load-bearing claims on every render — that μ* is exactly 1 when R = r, that it rises monotonically and never dips below 1 with the hinge outside the bore, that the drawn lobe ratio equals the shoe-factor ratio to machine precision, and that leading-trailing is direction-blind while two-leading is not.

node source/render.mjs regenerates every PNG and reprints every number in this file. node scripts/screenshot-demo.mjs boots the demo in a real browser, photographs it, and checks 28 assertions against it — including two that count pixels out of the drawing rather than trusting the model.

Gotchas