File cone edges by angle and skip corners nearer walls hide

Every ray of a cone leaves the same eye, so the Dart query now works in
angles from it. Edges the eye may see are filed once into angular bins,
each sorted nearest first, and a ray tests only its own bin. Runs of
consecutive ring edges that cross a bin from one boundary to the next
prove how far any ray in that bin can travel, and the edge tree is walked
nearest node first so whatever starts beyond those depths is skipped
whole: nodes, edges and the corners that would have cast rays.

The outline is the same shape: over 145,872 cones on all 26 map sides it
never differs from the previous native query by more than 1e-5 SVG units.
On Lotus and Breeze a cone casts about 2.5x fewer rays and runs 10-20x
fewer edge tests. In the browser, dragging a 103° cone, the query's p99
falls from 11-18 ms to 2.5-4.4 ms.

svg_cone_exact_test checks every line of real cones against exact single
rays, and fails if the hidden-corner test is made even 3% too eager.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
532aa7a367Dara Adedeji committed on 10/6/2026, 12:55:33 AMparent98320be
2 files changedLine totals unavailable