Keep every explanation and worked example on the page. Nothing moves or plays by itself, and the larger instruments load only when you ask.
Special relativity · Kinematics §5
Speeds do notsimply add.
Why doesn't adding speeds preserve light speed, and what happens when the motions are not along one line?
An executable model
Why speeds do not simply add
Static worked example
Predict before the numbers
An object moves at 0.6c relative to a frame that moves at 0.6c. What speed does the platform measure?
The result appears when you choose, say you have one in mind, or skip.
Worked example: composing 0.6c with 0.6c at 0° gives 0.8824c, where Galileo's addition gives 1.2c.
The dashed circle is light speed. The Galilean sum is labeled and is not the model. Composed speed 0.882353 c; Galilean 1.2 c.
Accepted composition (fractions of c)
Ux / c
0.882353
Uy / c
0.000000
U / c
0.882353
Printed §5 U / c
0.882353
Galilean |v + w| / c
1.200000
Shortfall 1 − U/c
0.11764706
Wigner rotation (degrees)
A single boost along one line has no Wigner rotation.
Fizeau limit panel (Laue 1907 interpretation; no 1851 dataset here)
Composition increment (m/s)
3.08676358
Fresnel first order (m/s)
3.08676363
Same scientific action without the plot
Type v/c, w/c, and the angle. Read Ux, Uy, U, the shortfall from light speed, and, in two-boosts mode, the rotation angle from the table. Ask whether the result is still below light speed.
Not modeled: accelerated motion; spin dynamics and Thomas precession of real bodies (only the kinematic rotation is shown); dispersion and the medium's own physics in Fizeau-type setups; gravity.
Show the code
The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.
composedSpeedShortfall · src/physics/reference/kinematics.ts · this site’s source, as built · sha256:af74a43a1adb32361c07caa5d8676b82a29c1da6511f68fcb855fe6d187c3b56
This function computes the listed outputs when it runs.
In words
Composing two speeds below c gives a speed below c, and this function returns by how much: 1 minus U/c, where U is the collinear composition. It is written as (1 - beta1) times (1 - beta2), over (1 + beta1 beta2). Compose 0.99 with 0.99 and the shortfall is one part in 19801, a number that says what the composed speed is far better than 0.99994949 does.
Implementation
/**
* 1 - U/c for collinear composition, never `1 - composeCollinear`.
* At 0.99 ⊕ 0.99 this is 1/19801.
*/exportfunctioncomposedSpeedShortfall(beta1:number,beta2:number):KinematicResult<number>{consta=refuseBeta(beta1);if(a)returna;constb=refuseBeta(beta2);if(b)returnb;returnok(((1-beta1)*(1-beta2))/(1+beta1*beta2));}
The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.
compositionIncrement · src/physics/reference/kinematics.ts · this site’s source, as built · sha256:85f4b6196296e162324a7317248b6a2da914aeb3e075f4990ec20bbe0c9c659c
This function computes the listed outputs when it runs.
In words
Add w to a frame already moving at u and the gain is not w. It is w times (1 minus u squared over c squared), divided by (1 + u w over c squared). The first factor is what makes the gain shrink as u approaches the light speed: at u near c, almost nothing is added however large w is.
Implementation
/** Cancellation-free (u ⊕ w) - u. */exportfunctioncompositionIncrement(u:number,w:number,c=speedOfLightMetresPerSecond(),):KinematicResult<number>{if(![u,w,c].every(finite)||c<=0){returnoutsideDomain("nonfinite-input","Increment needs finite speeds and a positive c.");}if(Math.abs(u)>=c||Math.abs(w)>=c){returnoutsideDomain("superluminal-observer","Increment inputs must be subluminal.");}returnok((w*(1-(u*u)/(c*c)))/(1+(u*w)/(c*c)));}
The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.
composePrinted · src/physics/reference/kinematics.ts · this site’s source, as built · sha256:6867c4fe6fc64d68167f2382a7113dcb7ef7d09a8bd0ca42e5b34db9ef2853f2
This function computes the listed outputs when it runs.
In words
This is the formula of paper 3, section 5: the resulting speed is the square root of (v squared plus w squared plus twice v w cos alpha, less the square of v w sin alpha over c), all divided by (1 + v w cos alpha over c squared). Under the root the first three terms are the parallelogram law, the answer ordinary mechanics would give; the subtracted term and the denominator are what the theory adds, and both vanish as the speeds fall away from c. The angle alpha is between the two velocities, and the expression is symmetric in v and w, which the paper remarks on.
Implementation
/** Paper 3 §5 printed forms. V is c. alpha in radians. */exportfunctioncomposePrinted(v:number,w:number,alpha:number,c=speedOfLightMetresPerSecond(),):KinematicResult<number>{if(![v,w,alpha,c].every(finite)||c<=0){returnoutsideDomain("nonfinite-input","Printed composition needs finite speeds and a positive c.",);}if(Math.abs(v)>=c||Math.abs(w)>=c){returnoutsideDomain("superluminal-observer","Printed composition inputs must be subluminal.");}constcosA=Math.cos(alpha);constsinA=Math.sin(alpha);constden=1+(v*w*cosA)/(c*c);constinner=v*v+w*w+2*v*w*cosA-((v*w*sinA)/c)**2;if(inner<0||den===0){returnoutsideDomain("invalid-parameter","Printed composition radicand or denominator is invalid.",);}returnok(Math.sqrt(inner)/den);}
Presets
Speeds do not simply add. Two speeds below light's combine to a speed below light's, and light keeps its speed whatever other speed is added to it.
§5 of the relativity paper asks how a point moving with velocity w in the moving system k moves as seen from K. Putting its motion through the transformation of §3 gives, for w along the motion, U = (v + w)/(1 + vw/V²), and for w at an angle α to it, U = √((v² + w² + 2vw cos α) − (vw sin α/V)²)/(1 + vw cos α/V²). The parallelogram law of velocities therefore holds only to a first approximation. With both speeds at 0.6c along one line the lab gives 0.882c, where the Galilean sum would be 1.2c; at right angles it gives 0.768c instead of 0.849c. §5 draws two consequences: two speeds below V always compose to a speed below V, and composing V with any smaller speed gives V again, which the lab shows when the second speed is set to c. It adds that the collinear formula also follows from applying two transformations one after the other, and that such parallel transformations form a group. Two boosts that are not parallel do something §5 does not discuss: the result is a boost combined with a rotation of the axes, 12.68° for 0.6c along x followed by 0.6c at right angles. The lab also shows, as a later check, Fizeau's flowing water: light in water of index 1.333 moving at 7.06 m/s gains 3.09 m/s, the drag u(1 − 1/n²) that the same formula gives to first order.
Take v = 0.6c and w = 0.6c along the same line. The numerator is v + w = 1.2c. The denominator is 1 + vw/c² = 1 + 0.36 = 1.36. So U = 1.2c/1.36 = 0.882c. The denominator is always more than 1 when both speeds point the same way, so the result is always less than the plain sum. To see that it stays below c, write v = c − κ and w = c − λ with κ and λ positive, as §5 does; then U = c(2c − κ − λ)/(2c − κ − λ + κλ/c), and the extra κλ/c in the denominator makes the fraction less than 1. Now let w = c: U = (v + c)/(1 + v/c) = c(v + c)/(c + v) = c, whatever v is. At right angles, α = 90°, so cos α = 0 and sin α = 1, and U = √(0.36 + 0.36 − 0.36²) c = √(0.72 − 0.1296) c = √0.5904 c = 0.768c. In components the lab gives 0.6c along x and 0.48c across; the sideways part is w√(1 − v²/c²) = 0.6 × 0.8 = 0.48, because the moving clock that times the point's sideways motion runs slow. The inverse check takes the result back: removing the frame's 0.6c returns the original 0.6c. The rapidity view turns the collinear rule into addition. Each speed has a rapidity atanh(v/c), here atanh(0.6) = ln 2 = 0.693, and the composed speed's rapidity is their sum, 1.386, with tanh(1.386) = 0.882. For the two boosts at right angles, multiplying their 4 × 4 transformation matrices gives a matrix that is not a pure boost; written as a boost followed by a rotation, the rotation is 12.68° and the combined γ is 1.25 × 1.25 = 1.5625. Last, Fizeau: to first order in the water's speed u, light in the water moves at c/n + u(1 − 1/n²). For n = 1.333, 1 − 1/n² = 0.437, so water flowing at 7.06 m/s adds 7.06 × 0.437 = 3.09 m/s.
Modern qualifications
§5 writes V for the speed of light and wξ, wη for the point's velocity components in k, and remarks that v and w enter the result symmetrically. The group property of the transformations also appears in Poincaré's note of June 1905. Laue showed in 1907 that the collinear formula reproduces Fresnel's drag coefficient 1 − 1/n², which Fizeau had measured in flowing water in 1851, so that what had been an ether hypothesis became a consequence of kinematics. The rotation that accompanies two non-parallel boosts was found by Thomas in 1926, in the precession of the electron's spin, and analysed by Wigner in 1939; the paper does not mention it. The name rapidity for atanh(v/c) is Robb's, from 1911.
Worked case (readable without JavaScript)
Two collinear motions of 0.6c compose to exactly 15/17 of light speed, about 0.882353c, not 1.2c. The Galilean sum exceeds light speed; the relativistic composition does not.
At a right angle the printed formula gives about 0.768375c. Two successive perpendicular boosts of 0.6c give the same speed and a spatial rotation of about 12.6804 degrees. That rotation is a kinematic fact of the composition, not a force on a gyroscope.