Commit 0a18fc5
perf: start variants at arc-length positions instead of densifying
Start-point variants now begin at evenly spaced arc-length positions,
computed by interpolating a single new start vertex on the ring, rather
than rotating to a vertex index on a fully densified ring. The old path
segmentized the whole ring only so index-based rotation would land on
evenly spaced points, but every vertex it added was collinear and
immediately stripped by the following Douglas-Peucker. Feeding DP just
the original vertices plus one cuts its input ~3.4x and the simplify step
~3.5x on examples/Water.gpkg (total single-core CPU work ~4.4s -> ~2.7s),
for ~1.5x faster end-to-end than 0.3.2 with output unchanged within
tolerance (per-polygon area drift <= 0.01%, worst concave turn unchanged).
Also replace numpy.roll with a slice-based cyclic shift (_roll0) in the
Chaikin and phase-alignment hot loops (bit-identical, fewer allocations),
and remove the now-dead pre-simplify segmentize scaffolding.
- Add tests: arc-length rotation preserves geometry and places the start
at the requested fraction; _roll0 matches np.roll bit-for-bit.
- Refresh stale comments/docstrings (union -> median, segmentize removed).
- Update README "How It Works" to align 1:1 with the pipeline figure, and
regenerate images/pipeline_steps.png plus its generator.
- CHANGELOG: document the median-consensus merge and the arc-length speedup.
- Re-run example notebooks and regenerate smoothed water output.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 95e70f3 commit 0a18fc5
11 files changed
Lines changed: 261 additions & 168 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
7 | 14 | | |
8 | 15 | | |
9 | 16 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
196 | 196 | | |
197 | 197 | | |
198 | 198 | | |
199 | | - | |
| 199 | + | |
200 | 200 | | |
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
204 | 204 | | |
205 | 205 | | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
215 | 214 | | |
216 | 215 | | |
217 | 216 | | |
| |||
Binary file not shown.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
| 25 | + | |
24 | 26 | | |
25 | 27 | | |
26 | 28 | | |
| |||
51 | 53 | | |
52 | 54 | | |
53 | 55 | | |
54 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
55 | 62 | | |
56 | 63 | | |
57 | 64 | | |
| |||
78 | 85 | | |
79 | 86 | | |
80 | 87 | | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
86 | 92 | | |
87 | | - | |
| 93 | + | |
88 | 94 | | |
89 | 95 | | |
90 | 96 | | |
91 | 97 | | |
92 | 98 | | |
93 | | - | |
| 99 | + | |
94 | 100 | | |
95 | | - | |
| 101 | + | |
| 102 | + | |
96 | 103 | | |
97 | 104 | | |
98 | | - | |
99 | | - | |
| 105 | + | |
| 106 | + | |
100 | 107 | | |
101 | 108 | | |
| 109 | + | |
102 | 110 | | |
103 | | - | |
| 111 | + | |
104 | 112 | | |
105 | 113 | | |
106 | 114 | | |
107 | 115 | | |
108 | | - | |
| 116 | + | |
109 | 117 | | |
110 | 118 | | |
111 | 119 | | |
| |||
121 | 129 | | |
122 | 130 | | |
123 | 131 | | |
124 | | - | |
125 | | - | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
126 | 135 | | |
127 | 136 | | |
128 | 137 | | |
129 | | - | |
| 138 | + | |
130 | 139 | | |
131 | | - | |
| 140 | + | |
132 | 141 | | |
133 | 142 | | |
134 | 143 | | |
135 | 144 | | |
136 | | - | |
137 | | - | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
138 | 148 | | |
139 | 149 | | |
140 | 150 | | |
141 | | - | |
142 | | - | |
| 151 | + | |
| 152 | + | |
143 | 153 | | |
144 | 154 | | |
145 | 155 | | |
146 | 156 | | |
147 | 157 | | |
148 | 158 | | |
149 | | - | |
| 159 | + | |
150 | 160 | | |
151 | 161 | | |
152 | 162 | | |
| |||
Loading
0 commit comments