Commit 36ed1dc
Thin OrientableSegment adapter on ExactCircularArc (Bible §3) (#66)
* feat(curve): Sync program dump + M.3 D-HF-IWD exact Curve* hook
Land CHAINSAW_LASER_PROGRAM.md and retip ratchet/seams/epic/METRIC_KIT.
Hook DirectedHausdorffDistance.isFullyWithinDistance through
exactOrientedPoints for certified arc/disc pairs; IWD + PERF-GATE tests.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* feat(curve): R.2 half-disc / open CircularString DE-9IM relate
Recognise certified half-disc shells and single open arcs in CurveExact.relate.
Point / line / same-circle disc matrices; diameter BI=1 run. Tests + seams sew.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* feat(curve): ML.4 ObstacleDistance hole-free CurvePolygon shell assembly
Filled shell component: interior distance 0 via covers/PIP, exterior min
over typed shell arcs/segments. Half-disc contains/covers exact; LEC tests.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* docs: retip Sync→M.3→R.2→ML.4 stop at c293fe9
Mark sequence complete on program/ratchet/epic; no further rungs.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* feat(curve): M.5 concentric-ring continuous Frechet + ML.2 half-disc MIC
M.5: DiscreteFrechetDistance closed form for concentric CircularString
rings (F=|R-r|). ML.2: CurveExact.halfDiscMic / mic() r=R/2 on axis.
Tests + program sequence docs. Skip M.4 / R.3.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* feat(curve): HP.4 faces-after-snap stamp + N-SS Option-B crossing expand
HP.4: CurveSegmentFaces wires CurveHotPixelSnap; SHARED_SNAPPED_RAY
stamp on canonical N≥3 fixture (not a curvature-order walk).
N-SS: OverlayNGCircle expands to proper-crossing two-shell assemble
via TwoShellClip after Option-B noder (half×hanging). Not 74-file.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* docs: retip M.5→ML.2→HP.4→N-SS expand stop at c956b50
Mark sequence complete; holds M.4/R.3/ML.3/HP.5/74-file/D-HF TAG.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* feat(curve): B-team Proofs Option B OrientableSegment + 1M-trial handover
Predicate seam: StraightOrientableSegment (core Orientation/RLI parity) and
ArcOrientableSegment (tangent-frame side + circle intersect). Million-trial
suites S1/S2/A1/A2/P1; handover doc + artifact JSON.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* refactor(curve): B-team OrientableSegment — ArcGeometry + DD side
Maintainability: slim OrientableSegment API; ArcGeometry owns circle/sweep/
intersect; densify oracle test-only. Precision: CGAlgorithmsDD.signOfDet2x2
for arc tangent-frame side. PERF still ≪ densify (p50 ~0.42×). Re-ran 1M.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* refactor(curve): B round-2 — AngleBetween + cached arc + filter→DD
Share AngleBetween with A (one sweep transcendental). Cache circumcircle
on ArcOrientableSegment; filter-then-DD side (Orientation family);
allocation-light hot path. 1M: S1/S2 1.0, A1 0.996151, A2 0.999996,
P1 densify ratio 0.105 (beats A length-cell 0.173 on our workload).
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* feat(curve): lightweight OrientableSegment on ExactCircularArc (A)
B predicates wrap A's ExactCircularArc; snapshot public getters for the
side hot path; AngleBetween.travelled for sweep; ArcGeometry keeps only
intersect/sample. Removed duplicate exactarc.AngleBetween. 1M green.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* refactor(curve): thinner OrientableSegment on ExactCircularArc
ArcOrientableSegment delegates circle/sweep to A (centerX/Y, isOnSweep).
Densify trials sample via ExactCircularArc.pointAt. ArcIntersects is the
only densifier bridge. Removed ArcGeometry. 1M still green (P1 ~0.12).
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* docs(curve): prose align OrientableSegment with Exact Curve Bible
Bible §3: ExactCircularArc privileged; OrientableSegment demoted to
optional adapter that composes Exact*. Update package-info, javadoc,
PROOFS_OPTION_B, CHAINSAW, handover preamble. Restore deprecated
exactarc.AngleBetween alias per bible Year-1 notes.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* fix(curve): thin OrientableSegment for Bible / PR #62 review
Public surface: OrientableSegment (start/end/length/side/intersects) +
OrientableSegments factory only. Impls package-private and compose
ExactCircularArc. AngleBetween package-private in exactcurve; removed
public exactarc AngleBetween shim. Docs state adapter demotion.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
* fix(curve): OrientableSegment review nits — centre, filter, endpoints
Centre query returns COLLINEAR (documented). Relative FILTER_EPS scale.
endpointOnArc uses ulp(r) radialTol. ArcIntersects docs: Exact* owns
future exact ∩. Tests for centre + shared-endpoint.
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>1 parent 1e2b919 commit 36ed1dc
15 files changed
Lines changed: 1093 additions & 45 deletions
File tree
- doc
- modules/curve/src
- main/java/org/locationtech/jts
- algorithm
- exactcurve
- orientable
- geom/curve
- test/java/org/locationtech/jts/algorithm/orientable
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
| 4 | + | |
4 | 5 | | |
5 | | - | |
| 6 | + | |
| 7 | + | |
6 | 8 | | |
7 | | - | |
| 9 | + | |
8 | 10 | | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
| 11 | + | |
18 | 12 | | |
19 | 13 | | |
20 | 14 | | |
21 | 15 | | |
22 | 16 | | |
23 | | - | |
24 | | - | |
| 17 | + | |
| 18 | + | |
25 | 19 | | |
26 | 20 | | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
| 21 | + | |
32 | 22 | | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
53 | 26 | | |
54 | | - | |
| 27 | + | |
55 | 28 | | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
Lines changed: 28 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
108 | 118 | | |
109 | 119 | | |
110 | 120 | | |
| |||
114 | 124 | | |
115 | 125 | | |
116 | 126 | | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
117 | 145 | | |
118 | 146 | | |
119 | 147 | | |
| |||
0 commit comments