winding coordinates by construction

When does the shifted coordinate actually separate winding?

The Vesuvius scroll-unrolling pipeline turns a hard 3D problem into an easy one with a single trick: a shifted = r − θ/2π·dr coordinate that makes "same turn" become "same value." This project isolates that trick and finds its exact limit — it works cleanly only when the winding is single, and degrades when the winding is nested. Two spirals, one measured boundary.

Section 01 — the result

Single winding separates. Nested winding doesn't.

Both spirals get the same shifted coordinate. On the helix (concentric turns, single winding) it snaps to clean integer bands — one value per turn. On the phyllotaxis disk (interleaved Fibonacci families, nested winding) the same coordinate scatters. The gap is not subtle.

Helix — single winding

shifted separates cleanly
0.00000mean residual to integer winding-snap

Phyllotaxis — nested winding

shifted scatters
0.24741mean residual (best Fibonacci family)
The shifted coordinate is ~2×10⁸× cleaner on single winding than on nested winding. That is why the scroll was tractable: its turns are concentric — single winding — so one coordinate isolates them. Change the winding structure and the trick stops working.

Reference values from the Python core's test suite (test_helix.py, float64, deterministic): helix residual 0.00000, phyllotaxis residual 0.24741. The canvases below recompute the same math in-browser.

Section 02 — explore

Turn the divergence angle. Watch injectivity appear.

Injectivity here is not penalized — it is structural. Only the golden angle (137.5°, the "most irrational" number) keeps florets from aligning. Rational angles collapse into radial arms with florets colliding. Drag the slider off 137.5° and the packing falls apart.

137.5°
600

phyllotaxis disk

min floret spacing (packing quality)

relative min spacing (higher = no collisions)

Section 03 — the algorithm's internal state

Four synchronized views of one computation.

Not the output — the state. The generating spiral, the shifted coordinate, the winding assignment, and the invertibility check, side by side. This is the debugging view: when something goes wrong, you see which stage it broke in.

1 · spiral (x,y)
Vogel map, colored by winding

2 · shifted coord
θ vs r − θ/2π·dr

3 · winding
snapped to integers

4 · inverse
fwd(inv(x))≈x, all green