Shortest-Path Law of Reflection (Catoptrica Prop. 4)¶
Hero’s Mirror-Unfolding Variational Proof Preserved in Greek by Olympiodorus — Codex Reference: Definitiones, Catoptrica & Dioptra: Genetic Axiomatics, Universal Gnomon, Shortest-Path Optics & Mountain Tunneling
Interactive Construction (catoptrica-reflection.svg)¶
Hover or click any geometric label—plane mirror AB, visual source C, object D, reflected virtual image K, optimal incidence point E, or perturbed triangle CZK—to inspect Hero’s shortest-path proof:
Exact Symbolic Unfolding in geometor.model¶
Setting mirror AB along \(y = 0\), eye C \(= (1, 3)\), and target D \(= (10, 6)\):
Dropping perpendicular DH onto AB gives foot H \(= (10, 0)\), and compass reflection across H gives virtual image K \(= (10, -6)\).
Joining the straight line CK intersects mirror AB at the unique equal-angle point E \(= (4, 0)\):
Incidence and reflection spreads with the mirror are strictly equal: \(s(AB, CE) = s(AB, ED) = \frac{1}{2}\) (\(45^\circ\)).
Total unfolded ray length is \(|CE| + |ED| = 3\sqrt{2} + 6\sqrt{2} = 9\sqrt{2} = |CK|\), with exact squared length \((9\sqrt{2})^2 = 162\).
For any perturbed mirror point such as Z \(= (7, 0)\), congruence ZD = ZK and Euclid’s triangle inequality ([I.20]) on CZK yield:
\[|CZ| + |ZD| = 3\sqrt{5} + 3\sqrt{5} = 6\sqrt{5}, \qquad (6\sqrt{5})^2 = 180 > 162 = (|CE| + |ED|)^2.\]
Executable Python API¶
import sympy as sp
from geometor.heron import construct_catoptrica_reflection
model, inv = construct_catoptrica_reflection()
assert inv["incidence_spread"] == inv["reflection_spread"] == sp.Rational(1, 2)
assert inv["optimal_length_sq"] == 162
assert inv["perturbed_length_sq"] == 180