Skip to content

P2.5.4 robustness / tangent stamp in jts-curve (OV-P2 / Bar 2) - #25

Open
grootstebozewolf wants to merge 3 commits into
cursor/p253-n-shell-faces-1cb3from
cursor/p254-tangent-stamp-917c
Open

P2.5.4 robustness / tangent stamp in jts-curve (OV-P2 / Bar 2)#25
grootstebozewolf wants to merge 3 commits into
cursor/p253-n-shell-faces-1cb3from
cursor/p254-tangent-stamp-917c

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Stacked on #24 @ 41cd38a. Do not merge this into #7. This is OV-P2 / Bar 2, not OV-P1. Does not merge #12 / #13 / #15 / #16 / #17 / #18 / #19 / #20 / #23 / #24 / #7. Does not push to feature/sfa-curve-rgr or master. P2.5.5 is not started.

Sentence

The noder is the named-miss suite, one assembly rule at a time. P2.1 nodes, P2.2 overlap-as-edge, P2.3 bite vs hole, P2.4 two-hole, hole-on-diameter, P2.5.2 N-string nodes, P2.5.3 N-shell faces. This rung is near-tangent robustness (catalog: “P2.5.4 Near-tangent robustness; stop if snap-round.”). Densify is never a noder. Core SegmentString / Noder is P2.5.5, 74 files, LOCKED.

Assembly rule

Named stamp, not a HotPixel. The only new cell is HALF_DISC × HALF_HANGING × STADIUM_ODD (H-SHELL-N-ODD crossings (±1, 0) + tangent (0, 5)). hasCoincidentLeave (ANGLE_EPS = 1e-8) still stamps: two different pieces leaving at the same angle are a tangent. Ordering them is snap-rounding. faces returns null and missReason() names P2.5.4 tangent leave-angle. A local curvature order was tried and walks the wrong rings — that is not a laser. If the walk needs HotPixel / ScaledNoder / core SegmentString, stamp and stop. That is P2.5.4 done.

Not this rung (existing named nulls, unchanged):

  • H-ANNULUS-TANGENT / CIRCLE_INT_TAN — P2.2 pinch
  • TOUCH-ext — P2.2 kiss
  • H-SHELL-N-MIXED / ON_DIAMETER — interval, not a tangent
  • H-SHELL-HOLE-X / holed Geometry — P2.3/P2.4
  • H-SHELL-N-ODD N=2 (HALF_DISC × STADIUM_ODD) — walk already stamps; pair-kit fallback already recovers the rings

Cells

Cell Product
N=2 pair-kit lasers (R1.5, R1.6-2, H-SHELL-2, H-FOUR / H-SHELL-N, H-SHELL-N-ODD, H-SAME-CIRCLE) unchanged laser; isApproximate()=false
HALF_DISC × HALF_HANGING × STADIUM_FOUR unchanged nine faces
HALF_DISC × HALF_HANGING × STADIUM_ODD this rung: named null P2.5.4 tangent leave-angle (snap-rounding, not a walk)

Pins

Must stay green / bit-identical where already lasering:

  • N=2 faces recover pair-kit CAP+XOR (R1.5, R1.6-2, H-SHELL-2, H-FOUR / H-SHELL-N, H-SHELL-N-ODD pair-kit fallback, H-SAME-CIRCLE)
  • N=3 HALF_DISC × HALF_HANGING × STADIUM_FOUR: nine named faces, union area 25.5π − LENS + 2
  • P2.1–P2.5.3 pair noder results unchanged
  • OverlayNGCurvePerfGateTest 82 / 0 at 15% slack

This rung's only new pin: testN3TangentStampsNull — HALF_DISC × HALF_HANGING × STADIUM_ODD is a named null with reason P2.5.4 tangent leave-angle.

What this is not

Verify

mvn -pl modules/curve -am test -DfailIfNoTests=false -Dcheckstyle.skip=true -Dpmd.skip=true \
  -Dtest=CurveSegmentStringTest,CompoundCurveShellOverlayTest,CircularArcOverlayTest,CircularDiscOverlayTest,CircularDiscPolygonOverlayTest,CircularLineOverlayTest,OverlayNGCurvePhase0Test,OverlayNGCurveRatchetTest,OverlayNGCurvePerfGateTest
bash dev/check-no-curved.sh
mvn -pl modules/curve checkstyle:check
mvn -pl modules/curve pmd:check

All green after this revision:

  • CurveSegmentStringTest 24 / 0 (testN3TangentStampsNull is the named near-tangent stamp; MIXED / pinch / kiss / holed / N=2 H-SHELL-N-ODD unchanged)
  • CompoundCurveShellOverlayTest 27 / 0
  • CircularArcOverlayTest 11 / 0
  • CircularDiscOverlayTest 12 / 0
  • CircularDiscPolygonOverlayTest 7 / 0
  • CircularLineOverlayTest 7 / 0
  • OverlayNGCurvePhase0Test 19 / 0
  • OverlayNGCurveRatchetTest 50 / 0
  • OverlayNGCurvePerfGateTest 82 / 0 (15% slack)
  • Naming-guard OK; Checkstyle 0 violations; PMD check on jts-curve succeeded

Slack stays 15%. Overlay name is OverlayNGCurve. No new public API. No noder was written in jts-core. P2.5.5 was not started.

Open in Web Open in Cursor 

cursoragent and others added 3 commits August 16, 2026 10:11
Coincident leave-angles at a node are ordered by signed curvature
when the pieces differ (closed form in jts-curve). Locally identical
leaves, a zero-length kiss, and MIXED overlap stay named green
nulls — not a HotPixel, not a fake crossing. Not P2.5.5.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
A local signed-curvature tie-break walks H-SHELL-N-ODD to area 18.42
instead of the pair-kit 42.84. That is not a laser. Named stamp
P2.5.4 tangent leave-angle; pair-kit fallback still recovers N=2.
Not a HotPixel. Not P2.5.5.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Catalog: near-tangent robustness; stop if snap-round. The only new
pin is HALF_DISC × HALF_HANGING × STADIUM_ODD. MIXED / pinch / kiss
/ holed / N=2 H-SHELL-N-ODD stay the existing named nulls. Not P2.5.5.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants