Meshes.jl icon indicating copy to clipboard operation
Meshes.jl copied to clipboard

`Ngon`-`Segment` intersection in 2D

Open tomerarnon opened this issue 2 years ago • 4 comments

julia> r = Rope(Point(1, 0), Point(1, 1), Point(2, 1));

julia> q = Quadrangle(Point(0,0), Point(0, 1), Point(1, 1), Point(1, 0));

julia> intersection(q, r)
ERROR: StackOverflowError:
Stacktrace:
 [1] intersection(f::Function, g₁::Quadrangle{2, Float64}, g₂::Rope{2, Float64, Vector{Point2}})
   @ Meshes ~/.julia/packages/Meshes/w8yhV/src/intersections.jl:100
 [2] intersection(f::Function, g₁::Rope{2, Float64, Vector{Point2}}, g₂::Quadrangle{2, Float64})
   @ Meshes ~/.julia/packages/Meshes/w8yhV/src/intersections.jl:100

julia> b = Box(Point(0,0), Point(1,1));

julia> intersection(b, r)
ERROR: StackOverflowError:
Stacktrace:
 [1] intersection(f::Function, g₁::Box{2, Float64}, g₂::Rope{2, Float64, Vector{Point2}})
   @ Meshes ~/.julia/packages/Meshes/w8yhV/src/intersections.jl:100
 [2] intersection(f::Function, g₁::Rope{2, Float64, Vector{Point2}}, g₂::Box{2, Float64})
   @ Meshes ~/.julia/packages/Meshes/w8yhV/src/intersections.jl:100

Related to #644. In my application, I would like to use a Rope to represent a "path", and I would like to find intersections between that path and a number of geometries. At the moment, those are segments, ngons (probably only rectangles), and other ropes.

I guess the stackoverlow is a red herring for any missing method: https://github.com/JuliaGeometry/Meshes.jl/issues/246

tomerarnon avatar Dec 05 '23 21:12 tomerarnon

Intersections of Box/Ngon with Segment is also missing (I wanted to see whether I could process the Rope as a series of segments).

tomerarnon avatar Dec 05 '23 21:12 tomerarnon

In the 2D case we need a new clipping algorithm between Segment and Ngon. We can then use this algorithm in the method with a Rope and a Ngon. The Box case should fallback to the Quadrangle case with convert(Quadrangle, box).

I am busy with other projects at the moment, and won't have the time to add these implementations in the following weeks. Feel free to propose algorithms as PRs for review.

juliohm avatar Dec 06 '23 10:12 juliohm

Just to double check @tomerarnon, are you aware of our intersects predicate? It can check whether or not two geometries intersect without actually computing the intersection.

juliohm avatar Dec 06 '23 22:12 juliohm

Yes! intersects is great to rule out an intersection in some cases. But when one does exist, I need to get the point/s in some cases.

tomerarnon avatar Dec 07 '23 21:12 tomerarnon