Annus Mirabilis · Interactive critical edition in preparation

Moving mirror reflection and radiation pressure

Reflect light off a receding mirror and account for every joule.

Moving mirror reflection and radiation pressure

Moving mirror reflection and radiation pressure

Static worked example

Model note
  • Frequency ratio ν′′′/ν (frequencyRatio), Reflection cosine cos(φ′′′) (cosPhiReflected), Reflection angle φ′′′ (degrees) (phiReflectedDeg), Amplitude ratio A′′′/A (amplitudeRatio), Radiation pressure on the mirror (radiationPressure), Radiation force (radiationForce), Incident radiant power (incidentPower), Reflected power (reflectedPower), Work done on the mirror each second (workRate) and Energy balance residual (energyBalanceResidual): Host calculation, by the site's own reference code. Computed in waves.
  • Computed from the settings last applied (settings revision 1, result 1).
  • Not modeled: mirror mass and acceleration (infinite mass limit); finite mirror thickness and internal absorption; diffraction at mirror edges; quantum radiation pressure fluctuations; non-monochromatic wave packets.

Predict before the numbers

The mirror recedes at 0.6c and light hits it head-on. What fraction of the incident frequency returns?

Three relations the model could have

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

Try
Experiment settings incident energy density, mirror area

Worked example: light meeting a mirror that moves at 0.6c, 0° from the normal, leaves at 180° with 0.25 of its frequency; of 1.2 × 10⁸ W arriving, 3 × 10⁷ W is reflected and 8.99 × 10⁷ W does work on the mirror.

Moving mirror with incident and reflected lightnormalv = +0.60c, recedingFincidentreflected

Energy per second

At the mirror, in the laboratory frame (K)

In1.1992 × 108 W
Out1.1992 × 108 W
  • incident light
  • reflected light, at a lower frequency
  • work the light does pushing the mirror (P·v·Am)
  • F, the radiation force on the mirror

Values at these settings

Relativistic wave reflection quantities and energy conservation ledger across frames.
Frequency ratio ν′′′/ν0.25
Reflection cosine cos(φ′′′)−1
Reflection angle φ′′′180 °
Amplitude ratio A′′′/A0.25
Radiation pressure P0.5 Pa
Radiation force F0.5 N
Incident power1.1992 × 108 W
Reflected power2.9979 × 107 W
Work done on the mirror, P·v·Am8.9938 × 107 W
Energy balance residual0 W

At normal incidence with a receding mirror (β = 0.6), the incident power is 0.4 IAm, the reflected power 0.1 IAm, and the mirror receives mechanical work at the rate 0.3 IAm. Energy is conserved exactly, with zero residual.

Light bouncing off a mirror that moves away comes back redder and weaker, and pushes the mirror less hard than it pushes a mirror at rest. The energy the light loses is exactly the work it does in pushing the mirror along.

The second half of §8 lets the plane waves of §7 fall on a perfectly reflecting mirror that moves with the system k. Einstein transforms the incident light into k, where the mirror is at rest and reflection is ordinary, and transforms the reflected light back to K. For normal incidence on a mirror receding at 0.6c, the reflected light has a quarter of the incident frequency and a quarter of the amplitude, so a sixteenth of the energy per unit volume. The energy principle then gives the pressure: the energy arriving at the mirror each second, less the energy leaving it, is the work the light does in pushing the mirror, P·v, and §8 finds P = 2(A²/8π)(cos φ − v/V)²/(1 − (v/V)²). With 1 J/m³ of light that is 0.5 Pa, against 2 Pa on a mirror at rest; to first order in v/V it is 2(A²/8π) cos² φ, which Einstein notes agrees with experience and with other theories. On a 1 m² mirror, 1.199 × 108 W arrives, 2.998 × 107 W leaves, and the other 8.994 × 107 W is the work done on the mirror, so the ledger balances. Drive the mirror toward the light at 0.6c and everything reverses: four times the frequency, 8 Pa, and the mirror does work on the light. At 30° the reflected ray still leans slightly forward, cos φ′′′ = +0.069, yet it moves along the mirror's direction at only 0.069c while the mirror moves at 0.6c, so the two separate. At oblique incidence the light's speed toward the mirror is c cos φ; at 60° and 0.6c that is 0.5c, less than the mirror's speed, so the light never catches it, and the lab says so instead of computing. In the mirror's own frame no work is done, and the reflected power equals the incident power.

Modern qualifications

§8 writes the energy per unit volume as A²/8π and the speed of light as V, and marks the reflected quantities with triple primes, A′′′, φ′′′ and ν′′′. Its first-order result, 2(A²/8π) cos² φ, is the pressure Maxwell's theory gave for a mirror at rest, which Bartoli had also argued for from thermodynamics; Lebedev, and independently Nichols and Hull, measured light pressure in 1901. The exact formula for a moving mirror, and the energy bookkeeping that yields it, are what §8 adds. Its closing claim, that the optics of moving bodies reduces to the optics of bodies at rest by a change of frame, states the program of the whole paper.

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.

evaluateSr11 · src/physics/reference/waves.ts · this site’s source, as built · sha256:1e4cadb9104f65489aad06ebe337527cec8d5de1ebd7919441142cbee73f8bcc

This function computes the listed outputs when it runs.

In words

The laboratory's evaluator for § 8's moving mirror. It takes the mirror's speed, the angle of incidence, the incident energy density and the mirror's area, and returns the frequency ratio, the cosine and degrees of the reflected angle, the amplitude ratio, the radiation pressure and force, the incident and reflected powers, the rate at which the light does work on the mirror, and the residual by which the energy account fails to balance. In the mirror's own rest frame it reports no work and equal powers, which is the check that the two descriptions agree.

Implementation

export function evaluateSr11(input: Sr11Input): Sr11EvaluationResult {
  const beta = input.beta;
  const phiDeg = input.incidentAngleDeg;
  const phiRad = (phiDeg * Math.PI) / 180;
  const u = input.incidentEnergyDensity ?? 1.0;
  const Am = input.mirrorArea ?? 1.0;
  const frame = input.frame ?? "lab";
  const unitLayer = input.unitLayer ?? "si";
  const c = C_SI; // the powers are published in W, so c is in m/s, not 1

  if (!Number.isFinite(beta) || Math.abs(beta) >= 1) {
    const reason = "Mirror speed beta must be in (-1, 1).";
    const outside = (quantityId: string, unit: string, semanticKind: string): ScientificResult =>
      Object.freeze({
        quantityId,
        unit,
        semanticKind,
        ownerId: OWNER_ID,
        status: "outside-domain" as const,
        condition: "superluminal-speed",
        domainKind: "physical" as const,
        reason,
        boundary: { parameterId: "beta", value: 0.95 },
      });

    return Object.freeze({
      beta,
      incidentAngleDeg: phiDeg,
      incidentAngleRad: phiRad,
      incidentEnergyDensity: u,
      mirrorArea: Am,
      frame,
      unitLayer,
      frequencyRatio: Number.NaN,
      cosPhiReflected: Number.NaN,
      phiReflectedRad: Number.NaN,
      phiReflectedDeg: Number.NaN,
      amplitudeRatio: Number.NaN,
      radiationPressure: Number.NaN,
      radiationForce: Number.NaN,
      incidentPower: Number.NaN,
      reflectedPower: Number.NaN,
      workRate: Number.NaN,
      energyBalanceResidual: Number.NaN,
      explanation: reason,
      results: [
        outside("frequencyRatio", "1", "ratio"),
        outside("cosPhiReflected", "1", "cosine"),
        outside("phiReflectedDeg", "deg", "angle"),
        outside("amplitudeRatio", "1", "ratio"),
        outside("radiationPressure", "Pa", "pressure"),
        outside("radiationForce", "N", "force"),
        outside("incidentPower", "W", "power"),
        outside("reflectedPower", "W", "power"),
        outside("workRate", "W", "power"),
        outside("energyBalanceResidual", "W", "power"),
      ],
      status: "outside-domain" as const,
      reason,
    });
  }

  const mmRes = movingMirror(beta, phiRad, { u, c, Am });

  if (mmRes.status !== "value") {
    const reason = mmRes.reason;
    const makeStatusResult = (
      quantityId: string,
      unit: string,
      semanticKind: string,
    ): ScientificResult => {
      if (mmRes.status === "outside-domain") {
        return Object.freeze({
          quantityId,
          unit,
          semanticKind,
          ownerId: OWNER_ID,
          status: "outside-domain" as const,
          condition: mmRes.condition,
          domainKind: mmRes.domainKind,
          reason,
          boundary: { parameterId: "beta", value: 0.95 },
        });
      }
      return Object.freeze({
        quantityId,
        unit,
        semanticKind,
        ownerId: OWNER_ID,
        status: "not-applicable" as const,
        reason,
      });
    };

    return Object.freeze({
      beta,
      incidentAngleDeg: phiDeg,
      incidentAngleRad: phiRad,
      incidentEnergyDensity: u,
      mirrorArea: Am,
      frame,
      unitLayer,
      frequencyRatio: Number.NaN,
      cosPhiReflected: Number.NaN,
      phiReflectedRad: Number.NaN,
      phiReflectedDeg: Number.NaN,
      amplitudeRatio: Number.NaN,
      radiationPressure: Number.NaN,
      radiationForce: Number.NaN,
      incidentPower: Number.NaN,
      reflectedPower: Number.NaN,
      workRate: Number.NaN,
      energyBalanceResidual: Number.NaN,
      explanation: reason,
      results: [
        makeStatusResult("frequencyRatio", "1", "ratio"),
        makeStatusResult("cosPhiReflected", "1", "cosine"),
        makeStatusResult("phiReflectedDeg", "deg", "angle"),
        makeStatusResult("amplitudeRatio", "1", "ratio"),
        makeStatusResult("radiationPressure", "Pa", "pressure"),
        makeStatusResult("radiationForce", "N", "force"),
        makeStatusResult("incidentPower", "W", "power"),
        makeStatusResult("reflectedPower", "W", "power"),
        makeStatusResult("workRate", "W", "power"),
        makeStatusResult("energyBalanceResidual", "W", "power"),
      ],
      status: mmRes.status,
      reason,
    });
  }

  let frequencyRatio: number;
  let cosPhiReflected: number;
  let phiReflectedRad: number;
  let amplitudeRatio: number;
  let radiationPressure: number;
  let radiationForce: number;
  let incidentPower: number;
  let reflectedPower: number;
  let workRate: number;
  let energyBalanceResidual: number;
  let explanation: string;

  if (frame === "mirror") {
    const ledger = mirrorFrameLedger(beta, phiRad, { I: u * c, Am, c }); // I is intensity, u·c
    frequencyRatio = ledger.frequencyFactor;
    cosPhiReflected = ledger.cosPhiPrime;
    phiReflectedRad = ledger.phiPrimeRad;
    amplitudeRatio = ledger.frequencyFactor;
    radiationPressure = ledger.forcePrime / Am;
    radiationForce = ledger.forcePrime;
    incidentPower = ledger.incidentPower;
    reflectedPower = ledger.reflectedPower;
    workRate = 0;
    energyBalanceResidual = 0;
    explanation =
      "In the mirror rest frame, reflection does no mechanical work and incident power equals reflected power.";
  } else {
    frequencyRatio = mmRes.frequencyRatio;
    cosPhiReflected = mmRes.cosPhiReflected;
    phiReflectedRad = mmRes.phiReflectedRad;
    amplitudeRatio = mmRes.amplitudeRatio;
    radiationPressure = mmRes.radiationPressure;
    radiationForce = mmRes.radiationForce;
    incidentPower = mmRes.incidentPower;
    reflectedPower = mmRes.reflectedPower;
    workRate = mmRes.workRate;
    energyBalanceResidual = mmRes.energyBalanceResidual;
    explanation = mmRes.explanation ?? "";
  }

  const phiReflectedDeg = (phiReflectedRad * 180) / Math.PI;

  const val = (
    quantityId: string,
    unit: string,
    semanticKind: string,
    v: number,
  ): ScientificResult =>
    Object.freeze({
      quantityId,
      unit,
      semanticKind,
      ownerId: OWNER_ID,
      status: "value" as const,
      value: v,
    });

  const results: ScientificResult[] = [
    val("frequencyRatio", "1", "ratio", frequencyRatio),
    val("cosPhiReflected", "1", "cosine", cosPhiReflected),
    val("phiReflectedDeg", "deg", "angle", phiReflectedDeg),
    val("amplitudeRatio", "1", "ratio", amplitudeRatio),
    val("radiationPressure", "Pa", "pressure", radiationPressure),
    val("radiationForce", "N", "force", radiationForce),
    val("incidentPower", "W", "power", incidentPower),
    val("reflectedPower", "W", "power", reflectedPower),
    val("workRate", "W", "power", workRate),
    val("energyBalanceResidual", "W", "power", energyBalanceResidual),
  ];

  return Object.freeze({
    beta,
    incidentAngleDeg: phiDeg,
    incidentAngleRad: phiRad,
    incidentEnergyDensity: u,
    mirrorArea: Am,
    frame,
    unitLayer,
    frequencyRatio,
    cosPhiReflected,
    phiReflectedRad,
    phiReflectedDeg,
    amplitudeRatio,
    radiationPressure,
    radiationForce,
    incidentPower,
    reflectedPower,
    workRate,
    energyBalanceResidual,
    explanation,
    results,
    status: "value" as const,
  });
}

Not modeled: mirror mass and acceleration (infinite mass limit); finite mirror thickness and internal absorption; diffraction at mirror edges; quantum radiation pressure fluctuations; non-monochromatic wave packets.

The explanation

Full explanation

The reflected light has lower frequency and amplitude, the mirror feels a pressure, and the power that arrives minus the power that leaves is the work done on the mirror. At 0.6c and normal incidence the frequency returns at a quarter, and three quarters of the arriving power becomes work.

Show every step of the investigation

Transform into the mirror's frame, reflect there, and transform back. Read the frequency, angle and amplitude ratios, then the pressure and the energy ledger; where the light is too oblique to catch the mirror, the lab says so.

An explanatory model, not an observation of nature. This embed starts from the laboratory’s worked defaults, not a saved run. Presentation options change the surrounding guide, never the numerical inputs.