Skip to content

Commit a856217

Browse files
zmerlynnclaude
andcommitted
boolean2: document the sign-based crossing decision
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 37a85f3 commit a856217

1 file changed

Lines changed: 9 additions & 4 deletions

File tree

docs/Boolean2.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,15 @@ The core operates on `manifold::Polygons`, which cannot encode isolated
107107
one-dimensional features. Output is therefore regularized: zero-area loops,
108108
collapsed edges, and cancelled opposing sub-edges are dropped.
109109

110-
Segment crossings are decided over a positive-width shared projection interval.
111-
Orthogonal-coordinate ties within epsilon are treated as symbolic ties, not raw
112-
CCW fallbacks. The current tie policy first uses canonical segment geometry, then
113-
falls back to stable edge ID for geometrically identical ties.
110+
Whether two segments cross is a sign decision: a crossing exists where each
111+
strictly straddles the other over a positive-width shared projection interval,
112+
with no epsilon band on nearness to an endpoint. A crossing that lands within
113+
epsilon of an endpoint is kept and snapped to that endpoint at insertion, not
114+
rejected. Orthogonal-coordinate ties within epsilon are treated as symbolic
115+
ties, not raw CCW fallbacks: the tie policy first uses canonical segment
116+
geometry, then falls back to stable edge ID for geometrically identical ties.
117+
Splitting an edge at a vertex that lies on it stays an epsilon (bounded-distance)
118+
decision, distinct from this sign-based crossing test.
114119

115120
Callers may pass an explicit epsilon. A non-positive epsilon asks the core to
116121
infer an operation scale and apply the local floating-point budget used by the

0 commit comments

Comments
 (0)