Total internal reflection · critical angle
Send light the other way — from dense glass UP into air. It bends away from the normal, but can it always escape? Is there an angle past which none gets out?

▶ Run the simulationSee the measured result
Units: critical angle θ_c = asin(n₂/n₁) = asin(1/1.5) = 0.7297277 rad = 41.8103149° for crown glass n₁ = 1.500 → air n₂ = 1.000; Hecht, Optics 5e, §4.7
How the lab tests it
Sweep the incidence angle θ₁ for light going glass (n₁=1.5) → air (n₂=1.0). At each angle draw the incident, reflected and refracted rays, dimming each by its Fresnel share of the energy. The on-screen critical angle is EARNED, not looked up: the module races light down broken glass→air paths (the only physics coded is travel time t = n·length per leg), locates each least-time crossing by golden-section on time comparisons, measures the winners' sines from their segments, and extrapolates the through-origin line sinθ₁ = a·sinθ₂ to grazing (sinθ₂ = 1) — that incidence IS the critical angle.
What it checks
SNELL + the CRITICAL ANGLE — θ₂ = asin((n₁/n₂)·sinθ₁) climbs to 90° at θ_c = asin(n₂/n₁) = 41.8°, beyond which sinθ₂ > 1 is impossible: NO transmitted ray exists and the reflection is total (the timed-race θ_c matches asin(n₂/n₁) to 3.8e-8 — the whole gap is the sqrt(eps) golden-section comparison basin, and both render as the identical 41.81°)
Critical angle & numerical aperture calculator
Where light stops being able to get out. Past the critical angle nothing refracts out and the interface becomes a perfect mirror — no coating, no silvering, no loss — and total internal reflection needs the light to start in the denser medium (n₁ > n₂), which is the one-directionality the simulation above falsifies its rival on. Every number here is derived from the two indices you type: θ_c is assembled as asin(n₂/n₁) rather than stored, and the Fresnel split is computed by the same E/H boundary matching the simulation runs, in the same convention — enter θ₁ = 41.753019° (one milliradian short of θ_c) and the page returns T = 23.6359%, which is the transmitted power the world's own energy gate pins at 0.2364. The measured-θ_c box defaults to 41.7627°, and that is deliberate: it is this lab's 8-seed timed-race reading with its ±0.0454° spread, not the textbook 41.8103°, so inverting it hands back n₁ = 1.501396 — the +0.093% chronometry bias the finding discloses rather than a tidy 1.5. Four things this lab does NOT measure, so the calculator does not pretend to: the evanescent field, which really does reach about a wavelength into the rare medium, so a second surface held that close steals light straight through a 'total' reflection (frustrated TIR, the optical fingerprint reader); dispersion — n is one number here, not n(λ), so a quoted θ_c belongs to one colour and a prism's critical angle drifts across the spectrum; absorption, scattering and surface roughness, which is why a real fibre still dims over kilometres; and, for the numerical aperture, everything that makes a fibre a fibre beyond its acceptance cone — modal structure, modal and chromatic dispersion, bend loss and attenuation. What it does rest on is measured: the threshold angle, the pointwise Snell invariant, and the Fresnel reflectance reaching exactly 1 at that same angle by an energy route the timing recovery never touches.
θ_c = arcsin(n₂/n₁), n₁ > n₂ · n₁ = n₂/sin θ_c · R(θ₁) from Fresnel, R = 1 for θ₁ ≥ θ_c · NA = √(n₁²−n₂²) = n₀·sin θ_a