Special relativity · Kinematics §5

Speeds do not simply 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?

Three relations the model could have

The result appears when you choose, say you have one in mind, or skip.

Compose two motions
How the two motions meet
Experiment settings the angle α in the moving frame

Changes here apply with Apply settings.

Worked example: composing 0.6c with 0.6c at 0° gives 0.8824c, where Galileo's addition gives 1.2c.

Velocity composition in units of cvwGalileanU

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 / c0.882353
Uy / c0.000000
U / c0.882353
Printed §5 U / c0.882353
Galilean |v + w| / c1.200000
Shortfall 1 − U/c0.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.
 */
export function composedSpeedShortfall(beta1: number, beta2: number): KinematicResult<number> {
  const a = refuseBeta(beta1);
  if (a) return a;
  const b = refuseBeta(beta2);
  if (b) return b;
  return ok(((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. */
export function compositionIncrement(
  u: number,
  w: number,
  c = speedOfLightMetresPerSecond(),
): KinematicResult<number> {
  if (![u, w, c].every(finite) || c <= 0) {
    return outsideDomain("nonfinite-input", "Increment needs finite speeds and a positive c.");
  }
  if (Math.abs(u) >= c || Math.abs(w) >= c) {
    return outsideDomain("superluminal-observer", "Increment inputs must be subluminal.");
  }
  return ok((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. */
export function composePrinted(
  v: number,
  w: number,
  alpha: number,
  c = speedOfLightMetresPerSecond(),
): KinematicResult<number> {
  if (![v, w, alpha, c].every(finite) || c <= 0) {
    return outsideDomain(
      "nonfinite-input",
      "Printed composition needs finite speeds and a positive c.",
    );
  }
  if (Math.abs(v) >= c || Math.abs(w) >= c) {
    return outsideDomain("superluminal-observer", "Printed composition inputs must be subluminal.");
  }
  const cosA = Math.cos(alpha);
  const sinA = Math.sin(alpha);
  const den = 1 + (v * w * cosA) / (c * c);
  const inner = v * v + w * w + 2 * v * w * cosA - ((v * w * sinA) / c) ** 2;
  if (inner < 0 || den === 0) {
    return outsideDomain(
      "invalid-parameter",
      "Printed composition radicand or denominator is invalid.",
    );
  }
  return ok(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.

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.

U=v+w1+vw/c2=1517cU=\frac{v+w}{1+vw/c^{2}}=\frac{15}{17}c
Explain this equation

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.

Embed this laboratory on another page. It starts from its worked defaults, not your current settings.