Instructor notes: Eclipse Geometry: Shadows in Space

Public notes (v0.2 policy). Not linked from primary navigation.

Exhibit: /cosmic-playground/exhibits/eclipse-geometry/

Overview

Navigation

This guide is instructor-facing Student demo: /play/eclipse-geometry/
UI markup: apps/demos/src/demos/eclipse-geometry/index.html
Demo logic: apps/demos/src/demos/eclipse-geometry/main.ts
Physics model: packages/physics/src/eclipseGeometryModel.ts

Where to go next

  • Model + math + assumptions: apps/site/src/content/instructor/eclipse-geometry/model.md
  • In-class activities: apps/site/src/content/instructor/eclipse-geometry/activities.md
  • Assessment bank: apps/site/src/content/instructor/eclipse-geometry/assessment.md
  • Future enhancements: apps/site/src/content/instructor/eclipse-geometry/backlog.md

New: Station Mode + Help

  • In the student demo, click Station Mode to build a data table you can print or copy as CSV.
  • Click Help / Keys (or press ?) for shortcuts; press g to open Station Mode.

Why this demo exists

Why This Matters Students can correctly say “eclipses happen at New or Full Moon,” and still expect them to happen every month. This demo adds the missing geometric condition: the Moon must also be near a node (close to the ecliptic plane). That second constraint is the reason eclipses come in “seasons” rather than every month.

Learning goals (ASTR 101)

Students should be able to:

  • State the two necessary conditions for eclipses:
    1. correct phase (New for solar, Full for lunar) and
    2. near a node (near the ecliptic plane).
  • Use the demo readouts (phase label, ecliptic latitude, node distance) to explain “no eclipse” cases.
  • Recognize that “penumbral vs umbral vs total” is about how close the alignment is.

10–15 minute live-teach script (projector)

  1. Start at defaults. Click Full Moon. Ask: “Do we always get a lunar eclipse at full moon?” Show the “NO ECLIPSE” status when the Moon is not near the ecliptic.

  2. Drag the Moon to a node while staying at Full Moon. Ask: “What changed?” Highlight the Nearest node readout and the eclipse status.

  3. Repeat at New Moon for solar eclipses. Emphasize that “New Moon” happens monthly, but “near a node” does not.

  4. Set orbital tilt to $0^\circ$. Ask: “What would happen to eclipses?” Use this counterfactual to cement the causal role of inclination.

  5. Run Animate 1 Year (or the long-run simulation at ~10 years) to show eclipse seasons as clustering in time.

Suggested connections to the other demos

  • Moon phases: phases tell you when eclipses are possible (New/Full), but not whether they happen.
  • Angular size: totality depends on angular size; eclipse geometry depends on alignment.
  • Seasons: both are “tilt + geometry” stories; learning to read angles is the transferable skill.

Activities

Navigation

Links Student demo: /play/eclipse-geometry/
Main guide: apps/site/src/content/instructor/eclipse-geometry/index.md
Model deep dive: apps/site/src/content/instructor/eclipse-geometry/model.md

MW Quick Exploration (3–5 min, pairs)

TPS: Two conditions, not one Think (30 s): “Which is more important for a solar eclipse: New Moon, or being near a node?”

Pair (60 s): Decide whether either condition alone is sufficient.

Share (1–2 min): Use the demo:

  1. Click New Moon (phase correct) but keep the Moon away from nodes → no eclipse.
  2. Drag the Moon near a node but away from New/Full → no eclipse.
  3. Do both → eclipse.

Debrief script: “Eclipses are constrained by two geometric conditions: phase + node proximity.”

MW Short Investigation (8–12 min, pairs/triads)

Investigation: Eclipse seasons are clusters Task: Use Animate 1 Year (or run a ~10-year sim on Normal speed) and record the times when eclipses occur.

Prompt: “Do eclipses happen evenly spaced, or in clusters? How far apart are the clusters?”

Expected pattern: Eclipses cluster in seasons separated by about half a year (because the Sun must be near a node for New/Full to line up with the plane crossing).

Share-out (2–3 min) Ask groups to report “how many eclipses per season” and “roughly how far apart seasons are.” Then connect back to the node geometry and the Sun’s motion around the ecliptic.

Friday Astro Lab (20–30+ min, groups of 3–4)

Astro Lab: How does orbital tilt control eclipse frequency? Deliverable: A short report (table + claim + reasoning). Tip: Use Station Mode to record cases and export/print your table.

Setup: Assign each group a tilt value (e.g., $0^\circ$, $2^\circ$, $5^\circ$, $8^\circ$).

Task: For your tilt:

  1. Run a 100-year simulation (or 10 years if time is tight).
  2. Record counts for solar and lunar eclipses (including penumbral).
  3. Describe how eclipse seasons change as tilt increases.

Claim prompt: “Increasing tilt makes eclipses [more/less] frequent because…”

Reasoning cue: the node window in longitude narrows as the inclination increases (harder to stay close to the plane at syzygy).

ASTR 201 extension (optional): Use the ecliptic latitude equation $\beta=\arcsin(\sin i\sin(\lambda-\Omega))$ to explain why the maximum possible $|\beta|$ is $i$.

Station version (for the Cosmic Playground capstone rotation)

Station card: Eclipse Geometry (6–8 minutes) Demo setup: Use New Moon and Full Moon buttons; drag near/far from nodes.
Tip: Click Station Mode to add snapshot rows and print/copy your table.

Your station artifact (fill in):

  1. Control(s): phase angle $\Delta$, node proximity (nearest-node distance or $|\beta|$), tilt $i$
  2. Observable(s): eclipse type (none/partial/central; penumbral/umbral/total)
  3. Governing relationship: write “eclipse requires syzygy + small $|\beta|$” in words
  4. Sanity check: what happens when $i=0^\circ$?
  5. Connection sentence: “This connects to angular size because…”

Word bank + sanity checks Word bank:

  • Syzygy: Sun–Earth–Moon aligned (New Moon for solar eclipses; Full Moon for lunar eclipses).
  • Node: where the Moon’s orbit crosses the ecliptic plane.
  • Ecliptic latitude $\beta$ (degrees): how far the Moon is above/below the ecliptic plane.
  • Inclination $i$ (degrees): tilt of the Moon’s orbit relative to the ecliptic plane.
  • Near a node: small $|\beta|$ (and/or small “nearest node” distance) at syzygy.

Sanity checks:

  • You need BOTH: (1) New/Full Moon and (2) near a node (small $|\beta|$). One condition alone is not enough.
  • If $i=0^\circ$, then $\beta=0^\circ$ always → eclipses happen every month.
  • Changing Earth–Moon distance can change whether a solar eclipse is total or annular (size matters too).

Assessment

Navigation

How to use this bank Each item includes a demo setup so you can reproduce the scenario live, plus distractors tied to common misconceptions.

Clicker questions

Clicker 1: Which phase for which eclipse? Prompt: A solar eclipse can only happen at…

A. New Moon
B. Full Moon
C. First Quarter
D. Third Quarter

Correct: A.

Reasoning: The Moon must be between Earth and the Sun (conjunction).

Demo setup: Click New Moon and show that solar eclipse checks occur at New; click Full Moon and show lunar eclipse checks occur at Full.

Clicker 2: Why not every month? Prompt: If New Moon happens every ~29.5 days, why don’t we get a solar eclipse every month?

A. The Moon’s orbit is tilted, so it usually passes above/below the Sun
B. The Sun turns off during most new moons
C. The Moon stops orbiting during some months
D. Earth’s seasons block eclipses

Correct: A.

Demo setup: Click New Moon, then drag the node line so the Moon is far from the ecliptic; show “NO ECLIPSE.”

Clicker 3: Nodes matter because… Prompt: A “node” is important for eclipses because it is where…

A. The Moon is closest to Earth
B. The Moon crosses the ecliptic plane
C. The Moon is half illuminated
D. The Moon’s crater density is highest

Correct: B.

Demo setup: Point at the ascending/descending node markers and the “Nearest node” readout.

Short answer

Short answer 1: The two-condition explanation Prompt (2–3 sentences): Explain why eclipses require two conditions. Your answer must mention phase and node proximity.

Answer key (core idea): A solar eclipse requires New Moon (Moon between Earth and Sun) and a lunar eclipse requires Full Moon (Earth between Sun and Moon), but phase alone is not sufficient. Because the Moon’s orbit is tilted, the Moon is usually above or below the ecliptic plane; an eclipse only happens when the Moon is near a node (close to the plane) at syzygy.

Short answer 2: Quick estimate with the tilt model Prompt: Using the small-angle intuition $\beta \approx i\sin(\Delta\lambda)$, estimate how far from the ecliptic plane the Moon is if $i=5.145^\circ$ and it is $\Delta\lambda=10^\circ$ from a node.

Answer key: $\sin 10^\circ \approx 0.17$, so $\beta \approx 5.145^\circ \times 0.17 \approx 0.9^\circ$ (order of magnitude).

Sanity check: This is “about a degree,” which is the right scale for eclipse windows.

Exit ticket (1 minute)

Exit ticket: Define ‘eclipse season’ Prompt: In one sentence, what is an “eclipse season”?

Expected: A time interval when the Sun is near one of the Moon’s nodes, so New/Full Moons during that interval are likely to produce eclipses.

Model notes (deeper)

Navigation

Links Student demo: /play/eclipse-geometry/
Model code: packages/physics/src/eclipseGeometryModel.ts
UI/visualization code: apps/demos/src/demos/eclipse-geometry/main.ts

What the demo is modeling (big picture)

This demo is a geometric model of why eclipses are rare. It combines:

  1. Phase geometry (New/Full Moon = conjunction/opposition relative to the Sun), and
  2. Orbital inclination geometry (the Moon is usually above/below the ecliptic plane).

The demo’s internal state uses inertial longitudes (degrees):

  • $\lambda_\odot$ = Sun ecliptic longitude (inertial)
  • $\lambda_M$ = Moon ecliptic longitude (inertial)
  • $\Omega$ = longitude of the ascending node (inertial)

The visualization is drawn in a Sun-fixed way by subtracting $\lambda_\odot$ for display, but the model calculations are done in inertial angles.

Phase angle (New vs Full)

The demo defines the phase angle:

$$\Delta = (\lambda_M - \lambda_\odot)\ \bmod\ 360^\circ$$

Let’s unpack each piece:

  • $\Delta$ is the phase angle (degrees).
  • $\Delta = 0^\circ$ corresponds to New Moon (conjunction).
  • $\Delta = 180^\circ$ corresponds to Full Moon (opposition).

In the interactive “live” eclipse check, the demo requires being within a tolerance of exact syzygy (pedagogical):

  • SYZYGY_TOLERANCE_DEG = 5 deg

In the long-run simulation, New/Full events are treated as exact conjunction/opposition.

Ecliptic latitude of the Moon (how far above/below the plane)

The key “tilt” calculation is the Moon’s ecliptic latitude $\beta$ (degrees):

$$\beta = \arcsin!\big(\sin i\ \sin(\lambda_M - \Omega)\big)$$

Let’s unpack each piece:

  • $\beta$ is the Moon’s ecliptic latitude (degrees). $|\beta|$ measures “height” above/below the ecliptic plane in angular terms.
  • $i$ is the Moon’s orbital inclination (degrees; default ~$5.145^\circ$ in the demo).
  • $\lambda_M-\Omega$ is the angular distance from the ascending node.

What this equation is really saying: the Moon is in the ecliptic plane at the nodes ($\lambda_M=\Omega$ or $\Omega+180^\circ$), and farthest from the plane about $90^\circ$ away from a node.

Latitude sanity checks

  • At the node: $\lambda_M=\Omega$ → $\sin(\lambda_M-\Omega)=0$ → $\beta=0^\circ$.
  • Max magnitude: $|\beta| \le i$.

Eclipse “how close is close enough?” (shadow geometry)

The demo uses a physically-motivated shadow model (similar triangles). A key second knob is that Earth–Moon distance $D_{EM}$ is selectable (held fixed during a run/simulation):

  • Earth–Moon distance: $D_{EM}$ (km; perigee/mean/apogee presets)
  • Earth radius: $R_E = 6371\ \text{km}$
  • Moon radius: $R_M = 1737.4\ \text{km}$
  • Sun radius: $R_\odot = 696{,}000\ \text{km}$
  • 1 AU: $D_{ES}=149{,}597{,}870.7\ \text{km}$

Earth–Moon distance presets in the student demo The student demo provides three presets (km):

  • Perigee-like: $363{,}300$
  • Mean: $384{,}400$
  • Apogee-like: $405{,}500$

These are course-appropriate representative values (the real distance varies continuously).

Umbra and penumbra radii (similar triangles)

At distance $x$ behind the shadowing body (along the anti-solar direction), the model uses:

$$r_{\text{umbra}}(x) = R_{\text{body}} - x,\frac{(R_\odot - R_{\text{body}})}{D_{ES}}$$

$$r_{\text{pen}}(x) = R_{\text{body}} + x,\frac{(R_\odot + R_{\text{body}})}{D_{ES}}$$

These are geometric cone formulas: the umbra narrows with distance; the penumbra widens.

Turning latitude into an “impact parameter”

The model converts a geocentric ecliptic latitude $|\beta|$ into a transverse offset (“miss distance”) at the relevant distance:

$$b \approx D_{EM},\sin|\beta|$$

This is the quantity compared to shadow radii.

Lunar eclipse classification (penumbral vs umbral vs total)

A lunar eclipse happens when the Moon passes through Earth’s shadow at Full Moon. The demo classifies by comparing $b$ to Earth’s shadow radii at the Moon:

  • Total lunar: $b \le r_{\text{umbra}}(D_{EM}) - R_M$
  • Umbral (partial) lunar: $r_{\text{umbra}}(D_{EM}) - R_M < b \le r_{\text{umbra}}(D_{EM}) + R_M$
  • Penumbral lunar: $r_{\text{umbra}}(D_{EM}) + R_M < b \le r_{\text{pen}}(D_{EM}) + R_M$

Thresholds at student distance presets (computed by the model) The model computes the maximum allowed geocentric latitude $|\beta|$ for each class via EclipseGeometryModel.eclipseThresholdsDeg({ earthMoonDistanceKm }).

At the three student presets (degrees):

Preset$D_{EM}$ (km)Total lunarUmbral lunarPenumbral lunar
Perigee-like363,300$0.467^\circ$$1.015^\circ$$1.548^\circ$
Mean384,400$0.427^\circ$$0.944^\circ$$1.478^\circ$
Apogee-like405,500$0.391^\circ$$0.882^\circ$$1.415^\circ$

Solar eclipse classification (partial vs total vs annular)

A solar eclipse happens at New Moon when the Moon’s shadow reaches Earth. The demo uses:

  • Partial solar: Earth intersects the Moon’s penumbra somewhere
  • Total solar: Earth intersects the Moon’s umbra (Moon appears larger than the Sun)
  • Annular solar: Earth intersects the Moon’s antumbra (Moon appears smaller than the Sun)

Geometrically, the model checks whether the miss distance $b$ is smaller than the shadow radius at Earth (including Earth’s radius). Then it distinguishes total vs annular by whether the Moon’s umbra cone still has positive radius at $x=D_{EM}$ (umbra reaches Earth) or has already “ended” (antumbra).

Thresholds at student distance presets (computed by the model) The model computes the maximum allowed geocentric latitude $|\beta|$ for “central” vs “partial” solar eclipses via EclipseGeometryModel.eclipseThresholdsDeg({ earthMoonDistanceKm }).

At the three student presets (degrees):

Preset$D_{EM}$ (km)“Central” window“Any partial” window
Perigee-like363,300$1.013^\circ$$1.546^\circ$
Mean384,400$0.957^\circ$$1.476^\circ$
Apogee-like405,500$0.921^\circ$$1.413^\circ$

Time evolution (what moves in the simulation)

The demo evolves inertial longitudes with constant rates:

  • Sun: $360^\circ$ per tropical year (365.2422 days)
  • Moon: $360^\circ$ per sidereal month (27.321661 days)
  • Node: regression period ~18.61 Julian years (westward drift)

The long-run “Simulate Years” feature counts eclipse events at each New Moon and Full Moon time step (synodic month spacing).

What’s simplified / not modeled

Model limitations (intentional)

  • Earth–Moon distance is selectable, but it is held fixed during a simulation run (we are not solving the Moon’s eccentric orbit).
  • The Moon’s orbital eccentricity and variable speed are ignored.
  • Earth’s orbital eccentricity is ignored (Sun distance is fixed at 1 AU).
  • We classify using geocentric latitude (parallax effects are only approximated via Earth radius in the solar case).
  • The syzygy tolerance in interactive mode is pedagogical, not ephemeris-grade.

Backlog

Navigation

How to use this backlog This is a planning guide. Physics items should improve realism without turning the demo into an ephemeris.

PriorityImpactEffortCategoryNotesCode entrypoint
P0HighMediumPhysicsDONE (2026-01-29): Added variable Earth–Moon distance (perigee/mean/apogee presets) and classified total vs annular solar eclipses (not just “central”).demos/_assets/eclipse-geometry-model.js + demos/eclipse-geometry/eclipse-geometry.js
P0HighLowUXDONE (2026-01-29): Made the “Speed” control persist and displayed the current speed near the simulation buttons.demos/eclipse-geometry/eclipse-geometry.js + demos/eclipse-geometry/index.html
P1HighMediumPedagogyDONE (2026-01-30): Added built-in Station Mode (table + CSV/print + synthesis prompt) using the shared demo-modes helper.demos/eclipse-geometry/index.html + demos/eclipse-geometry/eclipse-geometry.js + demos/_assets/demo-modes.js
P1MediumMediumPhysicsInclude Earth orbital eccentricity (Sun distance) as a second-order effect on eclipse cone sizes.demos/_assets/eclipse-geometry-model.js
P1MediumMediumUXAdd a “show shadow cones” overlay (umbra/penumbra) with scale disclaimer.demos/eclipse-geometry/index.html + demos/eclipse-geometry/eclipse-geometry.js
P2MediumLowAccessibilityDONE (2026-01-30): Added Help/Keys panel (plus global shortcuts ? and g).demos/eclipse-geometry/index.html + demos/eclipse-geometry/eclipse-geometry.js + demos/_assets/demo-modes.js
P2LowLowDocsUpdate demos/eclipse-geometry/README.md to match the current penumbral + shadow-model thresholds.demos/eclipse-geometry/README.md