Presets
The half-plane shading
Each directed hull edge floods its left half-plane (cyan→indigo). Where all washes overlap is exactly the hull's interior — the hull is the intersection of half-planes. Fade it to see that.
The two halves of the proof
Remove-vertex probe (minimal?)
On: hover a hull vertex to ghost the smaller hull if it were removed — a now-exposed point flashes. Removing an interior point changes nothing (it carried no load).
Buggy hull (negative control)
On: swap in naiveHull — the <0 vs <=0 collinear bug. It still contains every point but the audit lights its redundant collinear vertices and the verdict reads MINIMALITY VIOLATED.
Legend
the taut hull band (re-snaps live)
a hull vertex (load-bearing)
half-plane wash (left of each edge)
audit spoke: left-of (inside)
audit spoke: right-of (outside)
Drag a dot to re-snap the band live · click empty space to add · right-click / long-press a dot to remove · hover a point to audit it edge-by-edge.
The three roads
Graham polar-angle sort + stack scan
Monotone x-sort + lower then upper chain
Gift-wrap rotating taut ray, most-CCW step
Three unrelated constructions on the same point set. Watch each find the same vertices a different way — then land on the byte-identical canonical polygon. That equality, over hundreds of random seeds, is the proof: anti-circularity made visible.
Canonical vertex sequence
New scatter reshuffles the point set. The Delaunay–Voronoi dual is the future bench that picks up where this rubber band stops.
New scatter