A sun dog is geometry doing optics.
Every visible arc you see in a sundog photograph is the upper slice of a complete circle in the sky. Move the sliders, watch the math draw the eye. Or scroll on for the explainer.
Every bright feature has a name.
When you photograph a sundog you don't see one phenomenon; you see a stack of them. The bright spots at the sun's left and right are the parhelia. The white ring around the sun is the 22° halo. The colorful arc near the top of the sky is the circumzenithal arc. The vertical light shaft is the sun pillar. Each is its own geometric primitive — its own complete circle in the sky — and the sundog is what happens when several show up at once.
- 22° halo
- Tight ring around the sun. Most commonly seen alone.
- 46° halo
- Larger faint ring, roughly twice the 22° halo's radius.
- Sundog / parhelion
- Bright spot on the parhelic circle at the sun's altitude, just outside the 22° halo.
- Parhelic circle
- Horizontal great circle through the sun. Looks roughly horizontal in a photo.
- Circumzenithal arc (CZA)
- Colorful "smile" near the zenith, tangent to the 46° halo at its top.
- Supralateral arc
- Less common arc tangent to the 46° halo, just outside the CZA.
- Upper tangent arc
- "Eyelid" tangent to the 22° halo's top, from column-oriented crystals.
- Suncave Parry arc
- Parry-orientation cousin of the upper tangent, nested inside it.
- Lower tangent arc
- Mirror of upper tangent at the 22° halo's bottom edge.
Why do the bright spots sit at 22° from the sun?
Sundogs form when sunlight refracts through hexagonal ice crystals — tiny six-sided columns or plates falling through high cirrus clouds. A light ray entering one face of a hexagonal column and exiting an adjacent face traverses a 60° prism. The minimum-deviation angle of that prism for visible light in ice is — by refraction-index calculation — almost exactly 22°. So most refracted light bunches up at 22° from the source. To an observer, that's a bright spot 22° away from the sun.
The two crystal families that matter for the most common arcs:
Plate-oriented hexagonal crystals — flat hexagonal disks falling with their flat face horizontal. Light entering a side face and exiting the bottom face passes through a 90° prism, producing the 46° halo and the circumzenithal arc.
Column-oriented hexagonal crystals — hexagonal columns with their long axis horizontal. Light entering one side face and exiting the adjacent side face passes through a 60° prism, producing the 22° halo, the parhelia, and the upper tangent arc.
Sources: Greenler, Rainbows, Halos, and Glories (1980), Ch. 2–4. Tape, Atmospheric Halos (1994). Cowley, atoptics.co.uk.
When the sun rises, the parhelia slide outward.
The 22° angle is measured along the shortest path on the celestial sphere — the great-circle distance from the sun. But the parhelion sits on the parhelic circle, which is horizontal through the sun. Those two are the same thing only when the sun is on the horizon. When the sun rises, the parhelic-circle azimuthal offset has to grow to keep the actual angle from the sun at 22°. The exact relationship is
parhelion offset = R₂₂ / cos(h)
where R₂₂ is the apparent 22° halo radius and h is the sun's altitude. This is one of those rare cases where you can read the sun's altitude directly from a photograph, with no metadata and no instruments — just measure where the parhelion sits, divide.
Drag the slider. The atlas above re-derives every dependent primitive. At h = 32° the CZA disappears (it has exited the visible hemisphere); the parhelia drift outward across the entire range.
R₂₂ × 1.103
CZA visible: yes
This is also how a sundog photograph can become a measuring instrument. The 7-photo calibration pass shipped with this project (see §Multi-Photo Calibration Pass) recovers the sun's altitude from each photograph with no EXIF or astronomical metadata, within roughly 1 pixel of residual.
Every visible arc, mapped to a circle.
Atmospheric optics has spent two centuries naming the arcs in a halo display. The atlas embedded above renders each as the upper portion of its own complete circle, anchored to environmental state. Below is one paragraph per primitive — what it is, where it sits, and how the atlas constructs it.
22° halo
The bright ring around the sun. The most common halo phenomenon. Refraction through 60° prism in column-oriented hexagonal ice crystals.
circle (sun, R₂₂)46° halo
Larger faint ring, roughly twice the 22° halo's radius. Refraction through 90° prism in plate-oriented crystals.
circle (sun, 2·R₂₂)Sundog / parhelion
Bright spot on the parhelic circle just outside the 22° halo. Offset grows with sun altitude as R₂₂/cos(h).
point on parhelic ∩ 22°-coneParhelic circle
Horizontal great circle through the sun, carrying the parhelia. The atlas draws the unique circle through both parhelia and the sun.
circle through (sun, L-parhelion, R-parhelion)Circumzenithal arc (CZA)
"Smile" near the zenith, colored like an inverted rainbow. Always tangent to the 46° halo at its top.
circle tangent to 46° halo at its top pointSupralateral arc
Tangent to the 46° halo just outside the CZA, curving away from the sun. Less common than the CZA.
circle tangent to 46° halo, sun-sideUpper tangent arc
"Eyelid" above the 22° halo's top. Forms in column-oriented crystals. Visually nests near the suncave Parry arc.
circle tangent to 22° halo at topSuncave Parry arc
Parry-orientation companion above the upper tangent. Shoulders bend back toward the sun ("suncave" = concave-toward-sun).
tighter circle tangent to 22° halo at topLower tangent arc
Mirror of the upper tangent at the 22° halo's bottom. Only visible when the sun is high enough that the bottom of the halo isn't below the horizon.
circle tangent to 22° halo at bottomParry supralateral arc
Parry-orientation flanking shoulders near the supralateral. Optional vocabulary in the atlas.
mirror-image arcs along the 46° halo topInfralateral arcs
Lower-half mirror of the supralateral. Tangent to the 46° halo's bottom region.
circle tangent to 46° halo bottomSun pillar
Vertical light column above and below the sun, from horizontally-floating ice plates. Rendered in the atlas as the vesica between two virtual halos centered at the parhelia.
vesica (left-parhelion-halo, right-parhelion-halo)Run the atlas on your own sundog photograph.
Upload a sundog photo, mark the sun and the 22° halo edge, and the atlas will overlay every visible arc — and tell you the sun's altitude when the photograph was taken.
The atlas render runs entirely in your browser. EXIF metadata is stripped before any opt-in sharing.
For the backend pipeline and privacy policy, see PHASE5_BACKEND_PLAN.md · PHOTO_DATA_POLICY.md.
Command-line equivalent: scripts/overlay_calibrate.py.
People have been measuring sundogs since 1535.
Vädersoltavlan (Sun Dog Painting) — Stockholm, 1535. One of the earliest detailed depictions of a complex halo display, stored in Storkyrkan, Stockholm.
The phenomenon has been observed for centuries, but rigorous geometric description waited for the 19th and 20th-century atmospheric-optics literature. The atlas math on this page is standard refraction geometry; what's specific to this project is the integrated primitive-atlas presentation and the inverse-inference workflow.
Further reading:
- Greenler, R. Rainbows, Halos, and Glories. Cambridge University Press (1980, reissued 1990). The canonical reference for refraction geometry in hexagonal ice crystals.
- Tape, W. Atmospheric Halos. American Geophysical Union, Antarctic Research Series Vol. 64 (1994). Detailed arc geometry including supralateral/infralateral symmetry and altitude bindings.
- Cowley, L. Atmospheric Optics (atoptics.co.uk). The standard public reference site with HaloSim ray-trace renderings.
- Sun dog on Wikipedia.
Reproducible math, citable references.
The atlas is built so other tools, papers, and Wikipedia entries can cite the math reproducibly. Every formula has a source; the canonical pose is a JSON file; the calibration evidence is a runnable script.
JSON pose schema
The atlas's parameter state serializes to JSON; round-trips to byte-identical SVG. Used for archiving calibration poses.
Phase 3 math binding
Exported phase3 namespace with daggerOffset(h), czaVisible(h), parhelicCurvature(h). 33 assertions in the browser-side test harness.
Overlay calibration runner
Python script that runs the atlas math on a photograph and emits a residuals report. Used for the 7-photo calibration pass.
Roadmap & references
The geometry roadmap, Phase 2-3 closeouts, the atmospheric-optics reference table, and the calibration evidence.
Atlas geometry source
The ES-module that implements every primitive's geometric construction. Importable for other tools.
Calibration overlays
Seven photographs with atlas predictions overlaid; the regression baseline for any geometry change.