Current section
Files
Jump to
Current section
Files
lib/topo/ring_ring.ex
defmodule Topo.RingRing do
@moduledoc false
alias Topo.Util
alias Topo.PointRing
@spec intersects?(list, list) :: boolean
def intersects?(a, b) do
Util.any_edge_pair_not?(a, b, :disjoint) || !PointRing.any_point?(a, b, :disjoint) ||
!PointRing.any_point?(b, a, :disjoint)
end
@spec overlaps?(list, list) :: boolean
def overlaps?(a, b) do
Util.any_edge_pair?(a, b, :interior) ||
(PointRing.any_point?(a, b, :interior) || PointRing.any_point?(b, a, :interior))
end
@spec contains?(list, list) :: boolean
def contains?(a, b) do
!Util.any_edge_pair?(a, b, :interior) && !PointRing.any_point?(a, b, :disjoint)
end
@spec none_contain_ring?(list, list) :: boolean
def none_contain_ring?(rings, b) do
Enum.all?(rings, fn ring ->
Util.any_edge_pair_not?(ring, b, :disjoint) || PointRing.any_point?(ring, b, :disjoint)
end)
end
end