Historia-Urbis/figures/plot_subdivision_perf.svg
Dane Sabo 43df8f3ceb M0.5 part 2: OBB regularization + remaining figures
- regularize.rs: ρ=0 no-op, 0<ρ<1 lerp non-frontage verts toward
  OBB-snapped target, ρ=1 full snap to oriented bounding rectangle.
- viz: add fig_03_cul_de_sac, fig_05_acute_corner, plot_subdivision_perf
  (~125 µs/parcel at 25×25 scale), plot_parcel_area_hist (varied-block
  scene so the distribution is actually distributed). fig_07 panels at
  ρ ∈ {0, 0.5, 1.0} on a Y intersection (rectangles are no-ops for OBB).
- subdivide.rs cleanup pass: drop parcels on diff/union/conversion
  fallback paths instead of pushing untracked claims (was admitting
  overlaps). find_frontage_edge_after_clip now takes a tolerance — the
  cleanup pass uses a few-mm window since its inputs are 1mm-snapped.
- tests: bump assert_no_overlapping_parcels tol to 1cm² (the snap grid
  produces ~mm-scale slivers between adjacent parcels at intersection
  centers; still well below min_area).

Closes M1.0 DoD: all named tests pass, all spec figures present, OBB
regularization working, perf at ~0.13 ms/parcel.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 13:43:16 -04:00

1 line
961 B
XML

<svg xmlns="http://www.w3.org/2000/svg" width="570" height="150" viewBox="0 0 570 150"><text x="10" y="24" font-family="sans-serif" font-size="14" font-weight="bold">µs / parcel</text><text x="126" y="56.8" font-family="sans-serif" font-size="11" text-anchor="end">1x1 blocks</text><rect x="130" y="40" width="360" height="24" fill="#3a78c2" /><text x="496" y="56.8" font-family="sans-serif" font-size="11">461.01</text><text x="126" y="86.8" font-family="sans-serif" font-size="11" text-anchor="end">5x5 blocks</text><rect x="130" y="70" width="191.3953358625396" height="24" fill="#3a78c2" /><text x="327.3953358625396" y="86.8" font-family="sans-serif" font-size="11">245.10</text><text x="126" y="116.8" font-family="sans-serif" font-size="11" text-anchor="end">25x25 blocks</text><rect x="130" y="100" width="96.16452431750524" height="24" fill="#3a78c2" /><text x="232.16452431750525" y="116.8" font-family="sans-serif" font-size="11">123.15</text></svg>