@@ -54,9 +54,6 @@ intersects(c::Chain, g::Geometry) = any(∈(g), eachvertex(c)) || intersects(c,
5454intersects (g:: Geometry , c:: Chain ) = intersects (c, g)
5555
5656function intersects (g₁:: Geometry , g₂:: Geometry )
57- Dim = embeddim (g₁)
58- ℒ = lentype (g₁)
59-
6057 # must have intersection of bounding boxes
6158 intersects (boundingbox (g₁), boundingbox (g₂)) || return false
6259
@@ -69,6 +66,56 @@ function intersects(g₁::Geometry, g₂::Geometry)
6966 return intersects (g₁, d₂)
7067 end
7168
69+ gjkintersects (g₁, g₂)
70+ end
71+
72+ intersects (m:: Multi , g:: Geometry ) = intersects (parent (m), [g])
73+
74+ intersects (g:: Geometry , m:: Multi ) = intersects (m, g)
75+
76+ intersects (m₁:: Multi , m₂:: Multi ) = intersects (parent (m₁), parent (m₂))
77+
78+ intersects (d:: Domain , g:: Geometry ) = intersects (d, [g])
79+
80+ intersects (g:: Geometry , d:: Domain ) = intersects (d, g)
81+
82+ # fallback with iterators of geometries
83+ function intersects (geoms₁, geoms₂)
84+ for g₁ in geoms₁, g₂ in geoms₂
85+ intersects (g₁, g₂) && return true
86+ end
87+ false
88+ end
89+
90+ # -------------------------
91+ # SOLVE METHOD AMBIGUITIES
92+ # -------------------------
93+
94+ intersects (p:: Point , c:: Chain ) = p ∈ c
95+
96+ intersects (c:: Chain , p:: Point ) = intersects (p, c)
97+
98+ intersects (p:: Point , m:: Multi ) = p ∈ m
99+
100+ intersects (m:: Multi , p:: Point ) = intersects (p, m)
101+
102+ intersects (c:: Chain , m:: Multi ) = intersects (segments (c), parent (m))
103+
104+ intersects (m:: Multi , c:: Chain ) = intersects (c, m)
105+
106+ # ------------------
107+ # HELPER FUNCTIONS
108+ # ------------------
109+
110+ """
111+ gjkintersects(g₁::Geometry, g₂::Geometry)
112+
113+ Run the GJK algorithm for two convex geometries.
114+ """
115+ function gjkintersects (g₁:: Geometry , g₂:: Geometry )
116+ Dim = embeddim (g₁)
117+ ℒ = lentype (g₁)
118+
72119 # initial direction
73120 c₁, c₂ = centroid (g₁), centroid (g₂)
74121 d = c₁ ≈ c₂ ? rand (Vec{Dim,ℒ}) : c₂ - c₁
@@ -196,44 +243,6 @@ function _gjk!(::Val{3}, O, points)
196243 d
197244end
198245
199- intersects (m:: Multi , g:: Geometry ) = intersects (parent (m), [g])
200-
201- intersects (g:: Geometry , m:: Multi ) = intersects (m, g)
202-
203- intersects (m₁:: Multi , m₂:: Multi ) = intersects (parent (m₁), parent (m₂))
204-
205- intersects (d:: Domain , g:: Geometry ) = intersects (d, [g])
206-
207- intersects (g:: Geometry , d:: Domain ) = intersects (d, g)
208-
209- # fallback with iterators of geometries
210- function intersects (geoms₁, geoms₂)
211- for g₁ in geoms₁, g₂ in geoms₂
212- intersects (g₁, g₂) && return true
213- end
214- return false
215- end
216-
217- # -------------------------
218- # solve method ambiguities
219- # -------------------------
220-
221- intersects (p:: Point , c:: Chain ) = p ∈ c
222-
223- intersects (c:: Chain , p:: Point ) = intersects (p, c)
224-
225- intersects (p:: Point , m:: Multi ) = p ∈ m
226-
227- intersects (m:: Multi , p:: Point ) = intersects (p, m)
228-
229- intersects (c:: Chain , m:: Multi ) = intersects (segments (c), parent (m))
230-
231- intersects (m:: Multi , c:: Chain ) = intersects (c, m)
232-
233- # ------------------
234- # utility functions
235- # ------------------
236-
237246# support point in Minkowski difference
238247minkowskipoint (g₁:: Geometry , g₂:: Geometry , d) = withcrs (g₁, supportfun (g₁, d) - supportfun (g₂, - d))
239248
0 commit comments