Packages

Decompose polygons into polygons smaller than a given area

Current section

Files

Jump to
geo_partition lib topo ring_ring.ex
Raw

lib/topo/ring_ring.ex

defmodule GeoPartition.Topo.RingRing do
@moduledoc false
alias GeoPartition.Topo.{PointRing, Util}
@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