From 7ddb44a0eed82833f8da08dc0a32e9d0817f5c30 Mon Sep 17 00:00:00 2001 From: Daniel VandenHeuvel <95613936+DanielVandH@users.noreply.github.com> Date: Fri, 11 Aug 2023 07:05:40 +1000 Subject: [PATCH] Clipping Voronoi tessellations to arbitrary bounding boxes (#76) --- Project.toml | 2 +- docs/src/tessellations/figs/unbounded.png | Bin 82217 -> 82490 bytes src/DelaunayTriangulation.jl | 3 + src/data_structures/voronoi/voronoi.jl | 164 ++------------- src/geometry_utils/intersections.jl | 89 +++++++- src/geometry_utils/polygons.jl | 3 +- src/geometry_utils/sutherland_hodgman.jl | 89 ++++++++ src/interfaces/points.jl | 24 ++- src/predicates/general.jl | 71 ++++++- src/voronoi/coordinates.jl | 231 ++++++++++++++++++++ src/voronoi/main.jl | 18 +- test/geo_utils.jl | 173 ++++++++++++++- test/interfaces/points.jl | 9 +- test/temp_makie.jl | 3 +- test/voronoi/voronoi.jl | 245 ++++++++++++++++++---- 15 files changed, 920 insertions(+), 204 deletions(-) create mode 100644 src/geometry_utils/sutherland_hodgman.jl create mode 100644 src/voronoi/coordinates.jl diff --git a/Project.toml b/Project.toml index 06acbb797..fa8aa1630 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "DelaunayTriangulation" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" authors = ["Daniel VandenHeuvel "] -version = "0.8.3" +version = "0.8.4" [deps] DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" diff --git a/docs/src/tessellations/figs/unbounded.png b/docs/src/tessellations/figs/unbounded.png index faa337536686c6b041921541930ca1b0b3f08663..a8cfa47816f882de7201ff880c3d68f0e3e2dc8c 100644 GIT binary patch literal 82490 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

91g8Iz~k#b4{cKb>XRLM1+e$LFZ1X^vw0nvW@ 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 literal 82217 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%0Av7ye`TNwA$ePr3p6ocz<##@l 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 1 + return (NaN, NaN) + else + return (p1 + t * (q1 - p1), p2 + t * (q2 - p2)) + end +end + +""" + liang_barsky(a, b, c, d, p, q) + +Applies the Liang-Barsky algorithm to find the intersection of the line segment from `p` to `q` +with the rectangle from `[a, b] × [c, d]`. Returns `(u, v)`, where: + +- If there is an intersection, then `u` and `v` are the coordinates of the two intersections. +- If there is no intersection, then `u = v = (NaN, NaN)`. +""" +function liang_barsky(a, b, c, d, p, q) + t1 = 0.0 + t2 = 1.0 + px, py = _getxy(p) + qx, qy = _getxy(q) + Δx = qx - px + t1, t2, inside = liang_barsky_clipper(-Δx, px - a, t1, t2) + if inside + t1, t2, inside = liang_barsky_clipper(Δx, b - px, t1, t2) + if inside + Δy = qy - py + t1, t2, inside = liang_barsky_clipper(-Δy, py - c, t1, t2) + if inside + t1, t2, inside = liang_barsky_clipper(Δy, d - py, t1, t2) + if inside + if t2 < 1 + qx = px + t2 * Δx + qy = py + t2 * Δy + end + if t1 > 0 + px = px + t1 * Δx + py = py + t1 * Δy + end + end + end + end + end + if inside + return (px, py), (qx, qy) + else + return (NaN, NaN), (NaN, NaN) + end +end +function liang_barsky_clipper(p, q, t1, t2) + inside = true + if p < 0 + r = q / p + if r > t2 + inside = false + elseif r > t1 + t1 = r + end + elseif p > 0 + r = q / p + if r < t1 + inside = false + elseif r < t2 + t2 = r + end + elseif q < 0 + inside = false + end + return t1, t2, inside +end diff --git a/src/geometry_utils/polygons.jl b/src/geometry_utils/polygons.jl index 8b93bc9a6..c0c178f89 100644 --- a/src/geometry_utils/polygons.jl +++ b/src/geometry_utils/polygons.jl @@ -245,4 +245,5 @@ function sort_convex_polygon!(vertices, points) vert_to_angle = v -> (to_angle ∘ get_point)(points, v) sort!(vertices, by=vert_to_angle) return vertices -end \ No newline at end of file +end + diff --git a/src/geometry_utils/sutherland_hodgman.jl b/src/geometry_utils/sutherland_hodgman.jl new file mode 100644 index 000000000..5700903e1 --- /dev/null +++ b/src/geometry_utils/sutherland_hodgman.jl @@ -0,0 +1,89 @@ +struct Polygon{T,V,P} <: AbstractVector{T} + vertices::V + points::P + @inline function Polygon(vertices::V, points::P) where {V,P} + p = get_point(points, vertices[begin]) + T = typeof(p) + if vertices[begin] ≠ vertices[end] + return new{T,V,P}(vertices, points) + else + _verts = @views vertices[begin:(end-1)] + return new{T,typeof(_verts),P}(_verts, points) + end + end +end +Base.size(P::Polygon) = (length(P.vertices),) +Base.getindex(P::Polygon, i::Int) = get_point(P.points, P.vertices[i]) +Base.getindex(P::Polygon, i::Vararg{Int,N}) where {N} = + map(i) do j + P[j] + end + +""" + clip_polygon(vertices, points, clip_vertices, clip_points) + +Clips the counter-clockwise polygon defined by `(vertices, points)` against the clip +polygon `(clip_vertices, clip_points)`, assumed to be convex and counter-clockwise. The +Sutherland-Hodgman algorithm is used. It is assumed that +`vertices[begin] == vertices[end]` and `clip_vertices[begin] == clip_vertices[end]`. + +The returned result is another counter-clockwise polygon `P` that also satisfies `P[begin] == P[end]`. + +Note that this algorithm may potentially return overlapping edges, but this is fine for rendering. +""" +function clip_polygon(vertices, points, clip_vertices, clip_points) + return clip_polygon(Polygon(vertices, points), Polygon(clip_vertices, clip_points)) +end + +""" + clip_polygon_to_edge(input_list, q, p) + +Clips the input polygon `input_list` against the edge `qp`. This is the +intermediate step used in the Sutherland-Hodgman algorithm. +""" +function clip_polygon_to_edge(input_list, q, p) + output_list = eltype(input_list)[] + s = input_list[end] + for vertex in input_list + # By considering s = input_list[end], we can consider each edge of the + # input polygon one at a time, with the initial edge being s-vertex. + # The first step is to check if vertex is to the left or to the right of the + # edge qp. If it's to the left, then it is outside of the original polygon + # (note the assumption here that the poylgon is counter-clockwise). + if (is_left ∘ point_position_relative_to_line)(q, p, vertex) + # Now that we know that vertex is outside of the polygon, we need to know + # if there is any intersection to consider. In particular, does s-vertex intersect + # the edge qp? If s is also to the left of the line, then no there is no intersection + # and we can safely ignore the intersection (note that this check makes the implicit + # assumption that the clipping polygon is convex). If s is to the right of the line, + # then there is an intersection and we need to consider it. + flag = point_position_relative_to_line(q, p, s) + if !is_left(flag) # allow for is_on. If left, then the edge s-vertex is not inside the clipping polygon, so there is no intersection to consider + r = segment_intersection_coordinates(q, p, s, vertex) + push!(output_list, r) + end + # We still need to add back in the vertex to the output list regardless so that + # we can keep going with the next edge of the clipping polygon easily. + push!(output_list, vertex) + elseif (is_left ∘ point_position_relative_to_line)(q, p, s) + # In this case, vertex is to the right of qp, but now s is outside. This means there + # is an intersection of s-vertex with qp. + r = segment_intersection_coordinates(q, p, s, vertex) + push!(output_list, r) + end + s = vertex + end + return output_list +end + +function clip_polygon(poly::Polygon, clip_poly::Polygon{T}) where {T} + output_list = poly + q = clip_poly[end] + for p in clip_poly + input_list = output_list + output_list = clip_polygon_to_edge(input_list, q, p) + q = p + end + !isempty(output_list) && push!(output_list, output_list[begin]) + return output_list::Vector{T} +end \ No newline at end of file diff --git a/src/interfaces/points.jl b/src/interfaces/points.jl index 10f03ffaa..53db5455d 100644 --- a/src/interfaces/points.jl +++ b/src/interfaces/points.jl @@ -52,7 +52,7 @@ Given a collection of points `pts`, returns a `Tuple` of the `x` and `y` coordinates of the `i`th point in the collection. The methods currently defined are - getpoint(pts::AbstractVector, i) + getpoint(pts::AbstractVecOrTuple, i) getpoint(pts::AbstractMatrix, i) You can extend this function as you need. @@ -66,7 +66,7 @@ function getpoint end function getpoint(::P, ::Integer) where {P} return error("The getpoint function has not been defined for the type $P.") end -function getpoint(pts::AbstractVector, i::Integer) +function getpoint(pts::Union{AbstractVector,Tuple}, i::Integer) pt = pts[i] x, y = getx(pt), gety(pt) return (x, y) @@ -76,7 +76,7 @@ function getpoint(pts::AbstractMatrix, i::Integer) x, y = getx(pt), gety(pt) return (x, y) end -getpoint(pts, p) = (getx(p), gety(p)) +getpoint(pts, p) = (getx(p), gety(p)) # so that we can mix points and vertices """ get_point(pts::P, i...) @@ -133,7 +133,7 @@ Given a collection of points `pts`, returns an iterator over the indices of the collection. The methods currently defined are - each_point_index(pts::AbstractVector) + each_point_index(pts::AbstractVecOrTuple) each_point_index(pts::AbstractMatrix) with the first returning `eachindex(pts)` and the second @@ -144,7 +144,7 @@ function each_point_index end function each_point_index(::P) where {P} return error("The each_point_index function has not been defined for the type $P.") end -each_point_index(pts::AbstractVector) = eachindex(pts) +each_point_index(pts::Union{AbstractVector,Tuple}) = eachindex(pts) each_point_index(pts::AbstractMatrix) = axes(pts, 2) """ @@ -154,7 +154,7 @@ For a given collection of points `p`, returns an iterator that goes over each point in the collection. The methods currently defined are - each_point(pts::AbstractVector) + each_point(pts::AbstractVecOrTuple) each_point(pts::AbstractMatrix) with the first method simply returning `pts`, and the second returning @@ -164,19 +164,25 @@ function each_point end function each_point(::P) where {P} return error("The each_point function has not been defined for the type $P.") end -each_point(pts::AbstractVector) = pts +each_point(pts::Union{AbstractVector,Tuple}) = pts each_point(pts::AbstractMatrix) = eachcol(pts) """ num_points(pts) -Returns the number of points in `pts`. +Returns the number of points in `pts`. The methods currently defined are + + num_points(pts::AbstractVecOrTuple) + num_points(pts::AbstractMatrix) + +with the first returning `length(pts)` and the second returning +`size(pts, 2)`. You can extend this function as you need. """ function num_points end function num_points(::P) where {P} return error("The num_points function has not been defined for the type $P.") end -num_points(pts::AbstractVector) = length(pts) +num_points(pts::Union{AbstractVector,Tuple}) = length(pts) num_points(pts::AbstractMatrix) = size(pts, 2) """ diff --git a/src/predicates/general.jl b/src/predicates/general.jl index 1bc6b5acb..223f0fa14 100644 --- a/src/predicates/general.jl +++ b/src/predicates/general.jl @@ -489,4 +489,73 @@ function triangle_line_segment_intersection(p, q, r, a, b) return Cert.Multiple end end -end \ No newline at end of file +end + +""" + point_position_relative_to_box(a, b, c, d, p) + +Tests if the point `p` is inside the box `[a, b] × [c, d]`. Returns: + +- `Cert.Inside`: Inside the box. +- `Cert.On`: On the boundary of the box. +- `Cert.Outside`: Outside the box. +""" +function point_position_relative_to_box(a, b, c, d, p) + x, y = _getxy(p) + if (x < a) || (x > b) || (y < c) || (y > d) + return Cert.Outside + elseif (x == a) || (x == b) || (y == c) || (y == d) + return Cert.On + else + return Cert.Inside + end +end + +#= +THIS IS WRONG FOR [(0.0, 1.0), (-1.0, 2.0), (-2.0, -1.0)] and A, B, C, D = -1.0, 0.0, -1.0, 2.0 +""" + polygon_position_relative_to_box(a, b, c, d, vertices, points) + +Tests the position of the polygon defined by `(vertices, points)` relative to the box `[a, b] × [c, d]`. The +polygon is defined so that the indices in `vertices` correspond to points in `points`, and is defined so that +`vertex[begin] == vertex[end]`. + +- `Cert.Inside`: The polygon is contained entirely within the box. +- `Cert.Outside`: The polygon is entirely outside the box. +- `Cert.Touching`: The polygon is contained entirely within the box, but touches the boundary of the box. Note that if a polygon touches the boundary of the box but is entirely outside otherwise, `Cert.Outside` will be returned instead. +- `Cert.Multiple`: The polygon intersects the box in multiple places. + +Boundary indices are treated as being outside. +""" +function polygon_position_relative_to_box(a, b, c, d, vertices, points) + @assert vertices[begin] == vertices[end] + num_on = 0 + num_in = 0 + num_out = 0 + nv = length(vertices) - 1 + for i in @views vertices[begin:(end-1)] + if is_boundary_index(i) + num_out += 1 + continue + end + p = get_point(points, i) + cert = point_position_relative_to_box(a, b, c, d, p) + if is_on(cert) + num_on += 1 + elseif is_inside(cert) + num_in += 1 + else + num_out += 1 + end + end + if (num_out == nv) || (num_on ≥ 1 && num_out ≥ 1) + return Cert.Outside + elseif (num_in == nv) && num_on == 0 + return Cert.Inside + elseif (num_out == 0) && (num_on ≥ 1) + return Cert.Touching + else + return Cert.Multiple + end +end +=# \ No newline at end of file diff --git a/src/voronoi/coordinates.jl b/src/voronoi/coordinates.jl new file mode 100644 index 000000000..a93d51c8e --- /dev/null +++ b/src/voronoi/coordinates.jl @@ -0,0 +1,231 @@ +""" + get_polygon_coordinates(vorn::VoronoiTessellation, i, bounding_box = nothing) + +Returns a vector for the coordinates of the `i`th polygon in `vorn`. If `bounding_box` +is provided, the polygon will be clipped to the bounding box, assuming that it takes +the form `(xmin, xmax, ymin, ymax)`. Some specific cases: + +- If the polygon is unbounded but `bounding_box` is `nothing`, then an error will be thrown. +- If the polygon is bounded and `bounding_box` is `nothing`, then the polygon coordinates will be returned as if without any clipping. +- If the polygon is outside of the bounding box entirely, then an empty vector will be returned. + +If you do need to consider clipping your polygon to an arbitrary polygon, see the +[`polygon_clip`](@ref) function; this function (`get_polygon_coordinates`) uses +`polygon_clip` for rectangular clipping when `bounding_box` is considered. + +See also [`polygon_bounds`](@ref) for a good default for `bounding_box`. +""" +function get_polygon_coordinates(vorn::VoronoiTessellation, i, bounding_box=nothing) + if !isnothing(bounding_box) + a, b, c, d = bounding_box + @assert a < b && c < d "The bounding box must be of the form (xmin, xmax, ymin, ymax) with xmin < xmax and ymin < ymax." + end + if i ∈ get_unbounded_polygons(vorn) + isnothing(bounding_box) && throw(ArgumentError("The polygon is unbounded, so a bounding box must be provided. See DelaunayTriangulation.polygon_bounds for a reasonable default.")) + return get_unbounded_polygon_coordinates(vorn, i, bounding_box) + else + return get_bounded_polygon_coordinates(vorn, i, bounding_box) + end +end + +#= +""" + polygon_position_relative_to_box(vorn::VoronoiTessellation, bounding_box, i) + +Tests the position of the `i`th polygon of `vorn` relative to the bounding box`, ignoring +boundary indices. Returns: + +- `Cert.Inside`: The polygon is contained entirely within the box. +- `Cert.Outside`: The polygon is entirely outside the box. +- `Cert.Touching`: The polygon is contained entirely within the box, but touches the boundary of the box. Note that if a polygon touches the boundary of the box but is entirely outside otherwise, `Cert.Outside` will be returned instead. +- `Cert.Multiple`: The polygon intersects the box in multiple places. +""" +function polygon_position_relative_to_box(vorn::VoronoiTessellation, bounding_box, i) + a, b, c, d = bounding_box + vertices = get_polygon(vorn, i) + points = get_polygon_points(vorn) + flag = polygon_position_relative_to_box(a, b, c, d, vertices, points) + return flag +end +=# + +function get_clipping_poly_structs(vorn::VoronoiTessellation, i, bounding_box) + vertices = get_polygon(vorn, i) + points = get_polygon_points(vorn) + clip_vertices = (1, 2, 3, 4) + a, b, c, d = bounding_box + clip_points = ((a, c), (b, c), (b, d), (a, d)) + return Polygon(vertices, points), Polygon(clip_vertices, clip_points) +end + +""" + clip_bounded_polygon_to_bounding_box(vorn::VoronoiTessellation, i, bounding_box) + +Clips the `i`th polygon of `vorn` to the bounding box, assuming it is bounded. +The Sutherland-Hodgman algorithm is used. +""" +function clip_bounded_polygon_to_bounding_box(vorn::VoronoiTessellation, i, bounding_box) + poly, clip_poly = get_clipping_poly_structs(vorn, i, bounding_box) + return clip_polygon(poly, clip_poly) +end + +""" + _get_ray(vorn, i, boundary_index) + +Extracts the ray from the `i`th polygon of `vorn` corresponding to the `boundary_index`, where `boundary_index` +here means that `get_polygon(vorn, i)[boundary_index]` is a boundary index. +The returned points are given in the form `(p, q)`, defining the oriented line `pq` such that the line +is in the direction of infinity. +""" +function _get_ray(vorn, i, boundary_index) + C = get_polygon(vorn, i) + ghost_tri = get_circumcenter_to_triangle(vorn, C[boundary_index]) + u, v, _ = indices(ghost_tri) # w is the ghost vertex + p, q = get_generator(vorn, u, v) + px, py = _getxy(p) + qx, qy = _getxy(q) + mx, my = (px + qx) / 2, (py + qy) / 2 + m = (mx, my) + is_first = is_first_boundary_index(C, boundary_index) + if is_first + prev_index = previndex_circular(C, boundary_index) + r = get_polygon_point(vorn, C[prev_index]) + else + next_index = nextindex_circular(C, boundary_index) + r = get_polygon_point(vorn, C[next_index]) + end + if r == m # It's possible for the circumcenter to lie on the edge and exactly at the midpoint (e.g. [(0.0,1.0),(-1.0,2.0),(-2.0,-1.0)]). In this case, just rotate + dx, dy = qx - mx, qy - my + if (is_right ∘ point_position_relative_to_line)(p, q, r) + rotated_dx, rotated_dy = dy, -dx + r = mx + rotated_dx, my + rotated_dy + else + rotated_dx, rotated_dy = -dy, dx + r = mx + rotated_dx, my + rotated_dy + end + end + if (is_right ∘ point_position_relative_to_line)(p, q, r) # in this case, the circumcenter is inside and so mr points inwards rather than outwards + m, r = r, m + end + return m, r +end + +""" + grow_polygon_outside_of_box(vorn::VoronoiTessellation, i, bounding_box) + +Truncates unbounded edges of the `i`th polygon of `vorn`, assumed to be unbounded, +so that the line connecting the truncated unbounded edges is entirely outside +of the polygon. The method of growth is iterative, utilising the Liang-Barsky algorithm +at each stage while we translate the line. The returned polygon does not satisfy +`P[begin] == P[end]`. +""" +function grow_polygon_outside_of_box(vorn::VoronoiTessellation, i, bounding_box) + a, b, c, d = bounding_box + vertices = get_polygon(vorn, i) + new_vertices, new_points, boundary_indices = get_new_polygon_indices(vorn, vertices) + inside = true + t = 1.0 # don't do 0.5 so we get t = 1 later, else we get duplicated vertices for polygons completely outside of the box + u, v = boundary_indices + u_m, u_r = _get_ray(vorn, i, u) + v_m, v_r = _get_ray(vorn, i, v) + u_mx, u_my = _getxy(u_m) + u_rx, u_ry = _getxy(u_r) + v_mx, v_my = _getxy(v_m) + v_rx, v_ry = _getxy(v_r) + p = (0.0, 0.0) + q = (0.0, 0.0) + while inside + t *= 2.0 + p = (u_mx + t * (u_rx - u_mx), u_my + t * (u_ry - u_my)) + q = (v_mx + t * (v_rx - v_mx), v_my + t * (v_ry - v_my)) + int1, int2 = liang_barsky(a, b, c, d, p, q) + outside = all(isnan, int1) && all(isnan, int2) + inside = !outside + end + new_points[u] = p + new_points[v] = q + new_vertices[u] = u + new_vertices[v] = v + return new_vertices, new_points +end + +""" + get_new_polygon_indices(vorn, vertices) + +Given an unbounded Voronoi polygon from `vorn` with `vertices`, returns +`(new_vertices, new_points, boundary_indices)`, where `new_vertices` are vertices +mapping to the points in `new_points`, which is just a vector of all the polygon points, +and `boundary_indices` is a `Tuple` of the indices of the points in `new_points` that correspond +to points out at infinity. +""" +function get_new_polygon_indices(vorn, vertices) + new_points = NTuple{2,Float64}[] + sizehint!(new_points, length(vertices)) + new_vertices = similar(vertices, length(vertices) - 1) + boundary_indices = (0, 0) + for i in firstindex(vertices):(lastindex(vertices)-1) + v = vertices[i] + if is_boundary_index(v) + is_first = is_first_boundary_index(vertices, i) + if is_first + boundary_indices = (i, boundary_indices[2]) + else + boundary_indices = (boundary_indices[1], i) + end + push!(new_points, (NaN, NaN)) + new_vertices[i] = v + else + push!(new_points, _getxy(get_polygon_point(vorn, v))) + new_vertices[i] = length(new_points) + end + end + return new_vertices, new_points, boundary_indices +end + +""" + get_bounded_polygon_coordinates(vorn::VoronoiTessellation, i, bounding_box) + +Returns the coordinates of the `i`th polygon of `vorn`, assuming it is bounded. If +`bounding_box` is `nothing`, then the polygon coordinates will be returned as if without +any clipping. If `bounding_box` is provided, the polygon will be clipped to the bounding box +using [`clip_to_bounding_box`](@ref). +""" +function get_bounded_polygon_coordinates(vorn::VoronoiTessellation, i, bounding_box) + if isnothing(bounding_box) + C = get_polygon(vorn, i) + F = number_type(vorn) + coords = Vector{NTuple{2,F}}(undef, length(C) - 1) + for j in firstindex(C):(lastindex(C)-1) + coords[j] = get_polygon_point(vorn, C[j]) + end + return coords + else + return clip_bounded_polygon_to_bounding_box(vorn, i, bounding_box) + end +end + +""" + get_unbounded_polygon_coordinates(vorn::VoronoiTessellation, i, bounding_box) + +Returns the coordinates of the `i`th polygon of `vorn`, assuming it is unbounded, clipping +the polygon to the bounding box. +""" +function get_unbounded_polygon_coordinates(vorn::VoronoiTessellation, i, bounding_box) + return clip_unbounded_polygon_to_bounding_box(vorn, i, bounding_box) +end + +""" + clip_unbounded_polygon_to_bounding_box(vorn::VoronoiTessellation, i, bounding_box) + +Clips the `i`th polygon of `vorn` to the bounding box, assuming it is unbounded. +The unbounded polygon is truncated so that the line connecting the unbounded edges +is outside of the bounded box, and then the Sutherland-Hodgman algorithm +is used to clip the resulting polygon to the bounding box. +""" +function clip_unbounded_polygon_to_bounding_box(vorn::VoronoiTessellation, i, bounding_box) + new_vertices, new_points = grow_polygon_outside_of_box(vorn, i, bounding_box) + clip_vertices = (1, 2, 3, 4) + a, b, c, d = bounding_box + clip_points = ((a, c), (b, c), (b, d), (a, d)) + return clip_polygon(new_vertices, new_points, clip_vertices, clip_points) +end \ No newline at end of file diff --git a/src/voronoi/main.jl b/src/voronoi/main.jl index 6bc46e197..a99fd61ea 100644 --- a/src/voronoi/main.jl +++ b/src/voronoi/main.jl @@ -4,6 +4,18 @@ Construct the Voronoi tessellation of the points in `tri`. If `clip` is `true` then the Voronoi tessellation will be clipped to the convex hull of the points in `tri`. +!!! note "Accessing polygon coordinates and rectangle clipping" + + If you are interested instead in clipping the tessellation to a rectangular bounding box, see + [`get_polygon_coordinates`](@ref) which allows for a bounding box to be applied to an + unclipped tessellation, returning a vector of the coordinates of polygons, clipping + to the bounding box where applicable. [`polygon_bounds`](@ref) can be used to obtain good + default bounding boxes. Note that if you are not worried about this clipping, + and you know that your polygon is not unbounded (which would mean it is not in the + `unbounded_polygons` field of the `VoronoiTessellation` output), then you should instead use + `get_polygon(vorn, i)` to get the indices of the points in `vorn` that define the polygon, + and then use `get_polygon_point` to get the coordinates. + !!! warning Exact predicates are used only for classifying intersections, but no special methods @@ -11,11 +23,7 @@ Voronoi tessellation will be clipped to the convex hull of the points in `tri`. !!! warning - Clipping is not yet guaranteed to work for constrained triangulations. Unfortunate, - because that's really what I actually care about. If you have any thoughts for that, - or just any thoughts on the reference clipping paper (by Yan, Wang, Levy, and Liu: - "Efficient Computation of Clipped Voronoi Diagram for Mesh Generation), please let me know via - an issue. There is certainly a lot of room for improvement in the clipping code too. + Clipping is not yet guaranteed to work for constrained triangulations. """ function voronoi(tri::Triangulation, clip=has_boundary_nodes(tri)) has_ghost = has_ghost_triangles(tri) diff --git a/test/geo_utils.jl b/test/geo_utils.jl index ee808e535..70cb9ea50 100644 --- a/test/geo_utils.jl +++ b/test/geo_utils.jl @@ -4,9 +4,14 @@ using LinearAlgebra using Random using CairoMakie - include("./helper_functions.jl") +throw_f = expr -> @static if VERSION < v"1.8" + ErrorException(expr) +else + expr +end + @testset "Getting polygon features" begin tri, label_map, index_map = simple_geometry() pts = get_points(tri) @@ -963,4 +968,168 @@ end @test collect(r) ≈ collect(rtrue) end end -end \ No newline at end of file +end + +@testset "point_position_relative_to_box" begin + p = (4.0, 5.0) + a, b, c, d = 3.0, 7.0, 1.0, 8.0 + @test DT.is_inside(DT.point_position_relative_to_box(a, b, c, d, p)) + p = (2.0, 4.0) + @test DT.is_outside(DT.point_position_relative_to_box(a, b, c, d, p)) + p = (a, (c + d) / 2) + @test DT.is_on(DT.point_position_relative_to_box(a, b, c, d, p)) + p = (b, (c + d) / 2) + @test DT.is_on(DT.point_position_relative_to_box(a, b, c, d, p)) + p = ((a + b) / 2, c) + @test DT.is_on(DT.point_position_relative_to_box(a, b, c, d, p)) +end + +@testset "Polygon" begin + verts = [1, 11, 18, 26, 32, 72] + _verts = [verts; 1] + points = [rand(2) for _ in 1:maximum(verts)] + for verts in (verts, _verts) + poly = DT.Polygon(verts, points) + @test length(poly) == 6 + @test size(poly) == (6,) + @test poly[1] == Tuple(points[1]) + @test poly[2] == Tuple(points[11]) + @test poly[3] == Tuple(points[18]) + @test poly[4] == Tuple(points[26]) + @test poly[5] == Tuple(points[32]) + @test poly[6] == Tuple(points[72]) + @test eachindex(poly) == 1:6 + @test collect(poly) == Tuple.(getindex.(Ref(points), [1, 11, 18, 26, 32, 72])) + @test poly[begin:end] == [poly[i] for i in 1:6] + @inferred poly[1] + @inferred poly[5] + end +end + +@testset "Sutherland-Hodgman algorithm" begin + # rectangular + verts = [1, 2, 3, 4, 5, 6, 7, 8, 9] + points = [(50.0, 150.0), (200.0, 50.0), (350.0, 150.0), (350.0, 300.0), + (250.0, 300.0), (200.0, 250.0), (150.0, 350.0), (100.0, 250.0), (100.0, 200.0)] + clip_verts = [1, 2, 3, 4] + clip_points = [(100.0, 100.0), (300.0, 100.0), (300.0, 300.0), (100.0, 300.0)] + spoly = DT.Polygon(verts, points) + cpoly = DT.Polygon(clip_verts, clip_points) + result = DT.clip_polygon(spoly, cpoly) + @inferred DT.clip_polygon(spoly, cpoly) + @test collect.(result) ≈ [ + [100.0, 116 + 2 / 3], + [125, 100], + [275, 100], + [300, 116 + 2 / 3], + [300, 300], + [250, 300], + [200, 250], + [175, 300], + [125, 300], + [100, 250], + [100.0, 116 + 2 / 3] + ] + @test DT.clip_polygon(verts, points, clip_verts, clip_points) == result + @test DT.polygon_features(result, eachindex(result))[1] > 0 + + # bigger example + function to_rand_point_verts(___points) + _points = [Tuple(rand(2)) for _ in 1:500] + _points = [_points; ___points] + shuffle!(_points) + vertices = identity.(indexin(___points, _points)) # identity to convert eltype from Union{Nothing, Int} + return _points, vertices + end + a = (-4.0, 4.0) + b = (-1.0, 6.0) + c = (3.0, 6.0) + d = (4.0, 4.0) + e = (4.0, -1.0) + f = (2.0, -3.0) + g = (-2.94, -1.32) + points = [g, f, e, d, c, b, a] # ccw + npoints, nvertices = to_rand_point_verts(deepcopy(points)) + h = (-2.0, 7.0) + i = (-5.0, 6.0) + j = (-5.0, 2.0) + k = (-4.0, -2.0) + ℓ = (-1.0, -3.0) + m = (2.0, 2.0) + n = (1.0, 5.0) + clip_points = [h, i, j, k, ℓ, m, n] + nclip_points, nclip_vertices = to_rand_point_verts(deepcopy(clip_points)) + result = DT.clip_polygon(nvertices, npoints, nclip_vertices, nclip_points) + @test DT.circular_equality(collect.(result), collect.([ + g, + (-0.4915938130464, -2.1526563550773), + m, + n, + (-0.5, 6.0), + b, + a, + g + ]), ≈) +end + +@testset "intersection_of_ray_with_edge" begin + p, q, a, b = (0.0, 0.0), (5.0, 5.0), (-2.0, 5.0), (0.0, 5.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test all(isnan, r) + b = (2.0, -1.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test collect(r) ≈ [0.8, 0.8] + b = (0.0, -1.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test all(isnan, r) + a, b = (-2.0, -2.0), (-4.0, -4.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test all(isnan, r) + a, b = (4.0, 2.0), (2.0, 2.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test collect(r) ≈ [2.0, 2.0] + p, q, a, b = (0.0, 0.0), (0.0, 6.0), (4.0, 0.0), (2.0, -2.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test all(isnan, r) + b = (-2.0, 0.0) + r = DT.intersection_of_ray_with_edge(p, q, a, b) + @test collect(r) ≈ [0.0, 0.0] +end + +@testset "Liang-Barsky algorithm" begin + p, q = (-7.0, 5.0), (1.0, 8.0) + a, b, c, d = 0.0, 8.0, 0.0, 4.0 + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test all(isnan, u) && all(isnan, v) + p, q = (-3.0, 1.0), (10.0, 5.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test collect(u) ≈ [0, 1.9230769230769] + @test collect(v) ≈ [6.75, 4.0] + p, q = (0.0, -2.0), (0.0, 6.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test collect(u) ≈ [0, 0] + @test collect(v) ≈ [0, 4] + p, q = (2.0, 6.0), (-2.0, 2.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test u == v && (collect(u) ≈ [0, 4]) + p, q = (10.0, 6.0), (-2.0, 6.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test all(isnan, u) && all(isnan, v) + p, q = (4.0, 6.0), (4.0, -2.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test collect(u) ≈ [4.0, 4.0] + @test collect(v) ≈ [4.0, 0.0] + p, q = (2.0, 6.0), (10.0, -2.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test collect(u) ≈ [4.0, 4.0] + @test collect(v) ≈ [8.0, 0.0] + a, b, c, d = 4, 10, 2, 8 + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test collect(u) ≈ [4.0, 4.0] + @test collect(v) ≈ [6.0, 2.0] + p, q = (2.0, 6.0), (14.0, 8.0) + u, v = DT.liang_barsky(a, b, c, d, p, q) + @test collect(u) ≈ [4, 6 + 1 / 3] + @test collect(v) ≈ [10, 7 + 1 / 3] +end + diff --git a/test/interfaces/points.jl b/test/interfaces/points.jl index 796385cb7..70b067195 100644 --- a/test/interfaces/points.jl +++ b/test/interfaces/points.jl @@ -39,11 +39,12 @@ end global pts1 = [[2.0, 3.5], [1.7, 23.3], [-1.0, 0.0]] global pts2 = [(2.0, 3.5), (1.7, 23.3), (-1.0, 0.0)] global pts3 = [2.0 1.7 -1.0; 3.5 23.3 0.0] +global pts4 = ((2.0, 3.5), (1.7, 23.3), (-1.0, 0.0)) @testset "Collection of points" begin @testset "Getting points" begin @test_throws throw_f("The getpoint function has not been defined for the type DataType.") DT.getpoint(String, 5) - for pts in (pts1, pts2, pts3) + for pts in (pts1, pts2, pts3, pts4) @test DT.getpoint(pts, 1) == (2.0, 3.5) @test DT.getpoint(pts, 2) == (1.7, 23.3) @test DT.getpoint(pts, 3) == (-1.0, 0.0) @@ -68,7 +69,7 @@ global pts3 = [2.0 1.7 -1.0; 3.5 23.3 0.0] @testset "Each point index" begin @test_throws throw_f("The each_point_index function has not been defined for the type DataType.") each_point_index(String) - for pts in (pts1, pts2, pts3) + for pts in (pts1, pts2, pts3, pts4) @test each_point_index(pts) == 1:3 @inferred each_point_index(pts) end @@ -79,12 +80,14 @@ global pts3 = [2.0 1.7 -1.0; 3.5 23.3 0.0] @test each_point(pts1) == pts1 @test each_point(pts2) == pts2 @test each_point(pts3) == eachcol(pts3) + @test each_point(pts4) == pts4 + @inferred each_point(pts4) @inferred each_point(pts3) end @testset "Number of points" begin @test_throws throw_f("The num_points function has not been defined for the type DataType.") num_points(String) - for pts in (pts1, pts2, pts3) + for pts in (pts1, pts2, pts3, pts4) @test num_points(pts) == 3 @inferred num_points(pts) end diff --git a/test/temp_makie.jl b/test/temp_makie.jl index 622c410b2..2ce1561b9 100644 --- a/test/temp_makie.jl +++ b/test/temp_makie.jl @@ -238,9 +238,10 @@ if NEEDS_PLOT_DEFS if bnd === Makie.automatic return DelTri.polygon_bounds(vorn, extent) else - return p.bounding_box + return bnd end end + @show bbox map(generators_2f, polygons, bbox) do gens, polys, box return get_voronoi_tiles!(gens, polys, vorn, box) end diff --git a/test/voronoi/voronoi.jl b/test/voronoi/voronoi.jl index f32aac7fa..80ba10085 100644 --- a/test/voronoi/voronoi.jl +++ b/test/voronoi/voronoi.jl @@ -112,47 +112,61 @@ end c5 = DT.get_polygon_coordinates(vorn, 5, bbox) c6 = DT.get_polygon_coordinates(vorn, 6, bbox) c7 = DT.get_polygon_coordinates(vorn, 7, bbox) - @test DT.circular_equality(collect.(c1), collect.([(-1.5, 0.5) - (0.16666666666666666, -1.1666666666666665) + @test DT.circular_equality(collect.(c1), collect.([ + (-1.5, 0.5) + (0.166666666666, -1.1666666666666665) (1.0, 0.5) (1.0, 3.0) - (-1.5, 0.5)]), ≈) - @test DT.circular_equality(collect.(c2), collect.([(3.5, 0.5) + (-1.5, 0.5) + ]), ≈) + @test DT.circular_equality(collect.(c2), collect.([ + (0.5, -3.2) + (5.7, -3.2) + (5.7, -1.700000000000001) + (3.5, 0.5) (0.5, -2.5) - (0.5, -3.2000000001862645) - (xmax, ymin) - (5.769999999552965, -1.7699999995529652) - (3.5, 0.5)]), ≈) - @test DT.circular_equality(collect.(c3), collect.([(3.5, 0.5) + (0.5, -3.2) + ]), ≈) + @test DT.circular_equality(collect.(c3), collect.([ + (3.5, 0.5) (1.0, 0.5) (0.16666666666666666, -1.1666666666666665) (0.5, -2.5) - (3.5, 0.5)]), ≈) - @test DT.circular_equality(collect.(c4), collect.([(1.5, 5.270000000484288) - (xmin, ymax) - (-2.6999999997206032, 0.8999999999068677) + (3.5, 0.5) + ]), ≈) + @test DT.circular_equality(collect.(c4), collect.([ + (1.5, 5.2) + (-2.7, 5.2) + (-2.7, 0.9000000000000001) (-1.5, 0.5) (1.0, 3.0) (1.5, 4.5) - (1.5, 5.270000000484288)]), ≈) - @test DT.circular_equality(collect.(c5), collect.([(1.5, 4.5) + (1.5, 5.2) + ]), ≈) + @test DT.circular_equality(collect.(c5), collect.([ + (1.5, 4.5) (3.5, 0.5) - (5.769999999552965, 2.769999999552965) - (xmax, ymax) - (1.5, 5.270000000484288) - (1.5, 4.5)]), ≈) - @test DT.circular_equality(collect.(c6), collect.([(-2.6999999997206032, 0.8999999999068677) - (xmin, ymin) - (0.5, -3.2000000001862645) + (5.7, 2.6999999999999997) + (5.7, 5.2) + (1.5, 5.2) + (1.5, 4.5) + ]), ≈) + @test DT.circular_equality(collect.(c6), collect.([ + (-2.7, 0.9000000000000001) + (-2.7, -3.2) + (0.5, -3.2) (0.5, -2.5) (0.16666666666666666, -1.1666666666666665) (-1.5, 0.5) - (-2.6999999997206032, 0.8999999999068677)]), ≈) - @test DT.circular_equality(collect.(c7), collect.([(1.5, 4.5) + (-2.7, 0.9000000000000001) + ]), ≈) + @test DT.circular_equality(collect.(c7), collect.([ + (1.5, 4.5) (1.0, 3.0) (1.0, 0.5) (3.5, 0.5) - (1.5, 4.5)]), ≈) + (1.5, 4.5) + ]), ≈) end @testset "delete/add_polygon_adjacencies" begin @@ -899,12 +913,12 @@ end vorn = voronoi(tri) clip = DT.get_polygon_coordinates(vorn, 9, DT.polygon_bounds(vorn, 0.1)) @test DT.circular_equality(collect.(clip), collect.([ - [2.0316769079740804, 0.11847746641647516], - [2.0316769079740804, 1.107189193410733], - [0.8433942004507264, 1.107189193410733], - [0.7271857522962732, 0.8973620981454822], - [1.7423743304675243, 0.24505806539308744], - [2.0316769079740804, 0.11847746641647516] + (0.8374509236290323, 1.0964579554357115) + (0.7271857522962732, 0.8973620981454822) + (1.7423743304675243, 0.24505806539308744) + (2.0053766736553027, 0.1299847935961671) + (2.0053766736553027, 1.0964579554357115) + (0.8374509236290323, 1.0964579554357115) ]), ≈) end @@ -915,13 +929,11 @@ end vorn = voronoi(tri) clip = DT.get_polygon_coordinates(vorn, 2, DT.polygon_bounds(vorn, 2.0)) @test DT.circular_equality(collect.(clip), collect.([ - (-2.7441549307938113, 4.348255778263596) + (-2.551580488601045, 4.122780970352073) (-0.3314903102646037, 1.5233996567840244) - (3.319011238223682, -2.375672313568049) - (8.112835861587623, -2.375672313568049) - (8.112835861587623, 9.321543597488171) - (-2.7441549307938113, 9.321543597488171) - (-2.7441549307938113, 4.348255778263596) + (3.2875066205292076, -2.3420224793856605) + (3.2875066205292076, 4.122780970352073) + (-2.551580488601045, 4.122780970352073) ]), ≈) end @@ -982,4 +994,163 @@ end tri = triangulate(points) vorn = voronoi(tri) @test validate_tessellation(vorn) +end + +@testset "Polygon bounds with generators only" begin + points = rand(2, 50) + tri = triangulate(points) + vorn = voronoi(tri) + xmin, xmax, ymin, ymax = DT.polygon_bounds(vorn, 0.1; include_polygon_vertices=false) + _xmin, _xmax = extrema(points[1, :]) + _ymin, _ymax = extrema(points[2, :]) + @test xmin == _xmin - 0.1(_xmax - _xmin) + @test xmax == _xmax + 0.1(_xmax - _xmin) + @test ymin == _ymin - 0.1(_ymax - _ymin) + @test ymax == _ymax + 0.1(_ymax - _ymin) +end + +#= +@testset "Position of Voronoi polygons relative to box" begin + a = (-3.0, 7.0) + b = (1.0, 6.0) + c = (-1.0, 3.0) + d = (-2.0, 4.0) + e = (3.0, -2.0) + f = (5.0, 5.0) + g = (-4.0, -3.0) + h = (3.0, 8.0) + points = [a, b, c, d, e, f, g, h] + tri = triangulate(points) + vorn = voronoi(tri) + a, b, c, d = -8.0, 6.0, -2.0, 10.0 + bounding_box = (a, b, c, d) + results = Dict( + 1 => DT.has_multiple_intersections, + 2 => DT.is_inside, + 3 => DT.is_inside, + 4 => DT.has_multiple_intersections, + 5 => DT.has_multiple_intersections, + 6 => DT.has_multiple_intersections, + 7 => DT.has_multiple_intersections, + 8 => DT.has_multiple_intersections, + ) + for (i, cert_f) in results + @test cert_f(DT.polygon_position_relative_to_box(vorn, bounding_box, i)) + end +end +=# + +@testset "grow_polygon_outside_of_box" begin + A = (-3.0, 7.0) + B = (1.0, 6.0) + C = (-1.0, 3.0) + D = (-2.0, 4.0) + E = (3.0, -2.0) + F = (5.0, 5.0) + G = (-4.0, -3.0) + H = (3.0, 8.0) + points = [A, B, C, D, E, F, G, H] + tri = triangulate(points) + vorn = voronoi(tri) + a, b, c, d = -4.0, 6.0, -2.0, 4.0 + bounding_box = (a, b, c, d) + new_vertices, new_points = DT.grow_polygon_outside_of_box(vorn, 1, bounding_box) + @test collect.(new_points) ≈ collect.([ + (-1.1363636363636365, 5.954545454545455) + (-0.2999999999999998, 9.3) + (-0.5999999999999996, 11.100000000000001) + (-18.115384615384613, 3.4615384615384617) + (-10.807692307692307, 2.730769230769231) + ]) + @test new_vertices == [1, 2, 3, 4, 5] + new_vertices, new_points = DT.grow_polygon_outside_of_box(vorn, 5, bounding_box) + @test collect.(new_points) ≈ collect.([ + (2.710526315789474, 1.868421052631579) + (-0.7307692307692308, -0.8846153846153846) + (1.1153846153846159, -13.807692307692308) + (13.026315789473683, -1.0789473684210529) + ]) + @test new_vertices == [1, 2, 3, 4] + new_vertices, new_points = DT.grow_polygon_outside_of_box(vorn, 6, bounding_box) + @test collect.(new_points) ≈ collect.([ + (7.868421052631579, 0.39473684210526305) + (6.699999999999999, 8.299999999999999) + (3.1, 5.9) + (2.357142857142857, 2.9285714285714284) + (2.710526315789474, 1.868421052631579) + ]) + @test new_vertices == [1, 2, 3, 4, 5] + new_vertices, new_points = DT.grow_polygon_outside_of_box(vorn, 7, bounding_box) + @test collect.(new_points) ≈ collect.([ + (-0.7307692307692308, -0.8846153846153846) + (-4.166666666666666, 0.8333333333333335) + (-10.807692307692307, 2.730769230769231) + (-18.115384615384613, 3.4615384615384617) + (-0.26923076923076916, -4.115384615384615) + ]) + @test new_vertices == [1, 2, 3, 4, 5] + new_vertices, new_points = DT.grow_polygon_outside_of_box(vorn, 8, bounding_box) + @test collect.(new_points) ≈ collect.([ + (4.9, 7.1) + (-0.5999999999999996, 11.100000000000001) + (-0.2999999999999998, 9.3) + (3.1, 5.9) + ]) + @test new_vertices == [1, 2, 3, 4] + @inferred DT.grow_polygon_outside_of_box(vorn, 8, bounding_box) +end + +@testset "Clipping polygons to arbitrary bounding box" begin + A = (-3.0, 7.0) + B = (1.0, 6.0) + C = (-1.0, 3.0) + D = (-2.0, 4.0) + E = (3.0, -2.0) + F = (5.0, 5.0) + G = (-4.0, -3.0) + H = (3.0, 8.0) + points = [A, B, C, D, E, F, G, H] + tri = triangulate(points) + vorn = voronoi(tri) + a, b, c, d = -4.0, 6.0, -2.0, 4.0 + bounding_box = (a, b, c, d) + _pa = get_polygon_coordinates(vorn, 1, bounding_box) + _pb = get_polygon_coordinates(vorn, 2, bounding_box) + _pc = get_polygon_coordinates(vorn, 3, bounding_box) + _pd = get_polygon_coordinates(vorn, 4, bounding_box) + _pe = get_polygon_coordinates(vorn, 5, bounding_box) + _pf = get_polygon_coordinates(vorn, 6, bounding_box) + _pg = get_polygon_coordinates(vorn, 7, bounding_box) + _ph = get_polygon_coordinates(vorn, 8, bounding_box) + pa = NTuple{2,Float64}[] + pb = [(0.75, 4.0), (2.357142857142857, 2.9285714285714284), (2.625, 4.0), (0.75, 4.0)] + pc = [(2.710526315789474, 1.868421052631579), (2.357142857142857, 2.9285714285714284), (0.75, 4.0), (-1.0, 4.0), (-4.0, 1.0), (-4.0, 0.75), (-0.7307692307692308, -0.8846153846153846), (2.710526315789474, 1.868421052631579)] + pd = [(-4.0, 4.0), (-4.0, 1.0), (-1.0, 4.0), (-4.0, 4.0)] + pe = [(6.0, 0.9285714285714279), (2.710526315789474, 1.868421052631579), (-0.7307692307692308, -0.8846153846153846), (-0.5714285714285712, -2.0), (6.0, -2.0), (6.0, 0.9285714285714279)] + pf = [(6.0, 0.9285714285714284), (6.0, 4.0), (2.625, 4.0), (2.357142857142857, 2.9285714285714284), (2.710526315789474, 1.868421052631579), (6.0, 0.9285714285714284)] + pg = [(-0.5714285714285721, -2.0), (-0.7307692307692308, -0.8846153846153846), (-4.0, 0.75), (-4.0, -2.0), (-0.5714285714285721, -2.0)] + ph = NTuple{2,Float64}[] + @test DT.circular_equality(collect.(pa), collect.(_pa), ≈) + @test DT.circular_equality(collect.(pb), collect.(_pb), ≈) + @test DT.circular_equality(collect.(pc), collect.(_pc), ≈) + @test DT.circular_equality(collect.(pd), collect.(_pd), ≈) + @test DT.circular_equality(collect.(pe), collect.(_pe), ≈) + @test DT.circular_equality(collect.(pf), collect.(_pf), ≈) + @test DT.circular_equality(collect.(pg), collect.(_pg), ≈) + @test DT.circular_equality(collect.(ph), collect.(_ph), ≈) + + # test a small example + points = [(0.0, 1.0), (-1.0, 2.0), (-2.0, -1.0)] + tri = triangulate(points) + vorn = voronoi(tri) + bb = (-1.0, 0.0, -1.0, 2.0) + coord1 = get_polygon_coordinates(vorn, 1, bb) + coord2 = get_polygon_coordinates(vorn, 2, bb) + coord3 = get_polygon_coordinates(vorn, 3, bb) + _coord1 = [(0.0, 2.0), (0.0, 2.0), (-1.0, 1.0), (-1.0, 0.0), (0.0, -1.0), (0.0, 2.0)] + _coord2 = [(-1.0, 2.0), (-1.0, 1.0), (0.0, 2.0), (-1.0, 2.0)] + _coord3 = [(-1.0, -1.0), (0.0, -1.0), (0.0, -1.0), (-1.0, 0.0), (-1.0, -1.0)] + @test DT.circular_equality(collect.(coord1), collect.(_coord1), ≈) + @test DT.circular_equality(collect.(coord2), collect.(_coord2), ≈) + @test DT.circular_equality(collect.(coord3), collect.(_coord3), ≈) end \ No newline at end of file