Skip to content

feat: laser convex hull of circular-plus-straight members - #41

Draft
grootstebozewolf wants to merge 2 commits into
feature/sfa-curve-rgrfrom
cursor/laser-compound-hull-a220
Draft

feat: laser convex hull of circular-plus-straight members#41
grootstebozewolf wants to merge 2 commits into
feature/sfa-curve-rgrfrom
cursor/laser-compound-hull-a220

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Laser hull for the closed-form cases that were still chordsaw after the disc / single-arc path.

What this is

  • Laser hull. CurveExact.convexHull still answers a circular disc (the disc) and a single-arc CircularString (arcChordHull). Circular-plus-straight members now take a package-private gift-wrap (CurveConvexHull): a CurvePolygon whose shell is the exposed arcs plus the supporting tangent / chord segments. A stadium stays the two caps + two outer tangents. isApproximate() is not involved — this is not overlay — and the result is an exact closed form, not a densified POLYGON flagged exact.
  • H-CC pin (issue [visual-qa] H-CC · h-cc-1 #6): COMPOUNDCURVE (CIRCULARSTRING (0 0, 5 5, 10 0), (10 0, 10 10)) keeps the left bulge as an arc. Area is 50 + 12.5 acos(0.6), not the control-point 50.

What this is not

Fallback

Clothoid members and any uncertified mix return null from CurveExact.convexHull. CurveOps then densifies. That path is never flagged exact. An all-straight CompoundCurve is also a named null so core ConvexHull stays bit-identical.

Out of scope

ConcaveHull / alpha-shape stay out. Issue #6's concave path is a different product (static ConcaveHull, no virtual dispatch).

Verification

  • jts-curve default Surefire: 608 tests, 0 failures (spec class still excluded).
  • HullFunctionsCurveTest: 12 tests, 0 failures.
  • PMD and Checkstyle clean on jts-curve. Naming guard clean.
  • Slack 15% on the new compound-hull PERF-GATE row. OverlayNGCurve is untouched.
Open in Web Open in Cursor 

cursoragent and others added 2 commits August 16, 2026 13:18
Exact hull for CompoundCurve / stadium / two-cap mixes: a CurvePolygon
whose shell is the exposed arcs plus supporting tangents. Disc and
single-arc paths stay as they were. Clothoid and all-straight members
are a named null so densify stays the fallback and is never flagged
exact. Not a noder; not Bar 2; not a merge into #7.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Arc vertices from cos/sin were within eps of the input points but
not equal, so the legacy LinearRing derived from the CompoundCurve
shell rejected the ring. Snap junctions and pin the bulge on the
arc member rather than the densified distance path.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Aug 16, 2026
Keep only what is on feature/sfa-curve-rgr @ 8e39e39. D-HF closed
form is the two pairs from 0ca71b. Do not name #41#45 or Bar 2.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Aug 16, 2026
Cite #41-via-#42 H-CC, #42 logoLines, #43 A/B, #44 WKB export,
#22 LEC, #31 stadium MIC, #39 clothoid extras, #35 TB-IN.
D-HF stays 0ca71b4 on #7, not #45.

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