Polygon in vertex representation (VPolygon)
LazySets.VPolygon — TypeVPolygon{N, VN<:AbstractVector{N}} <: AbstractPolygon{N}Type that represents a polygon by its vertices.
Fields
vertices– the list of vertices
Notes
The constructor of VPolygon runs a convex hull algorithm on its vertices by default, to remove the possibly redundant vertices. The vertices are sorted in counter-clockwise fashion. Use the flag apply_convex_hull=false to skip the computation of the convex hull.
VPolygon(vertices::Vector{Vector{N}}; apply_convex_hull::Bool=true, algorithm::String="monotone_chain")
Examples
A polygon in vertex representation can be constructed by passing the list of vertices. For example, we can build the right triangle
julia> P = VPolygon([[0, 0], [1, 0], [0, 1]]);
julia> P.vertices
3-element Array{Array{Int64,1},1}:
[0, 0]
[1, 0]
[0, 1]Alternatively, a VPolygon can be constructed passing a matrix of vertices, where each column represents a vertex:
julia> M = [0 1 0; 0 0 1.]
2×3 Array{Float64,2}:
0.0 1.0 0.0
0.0 0.0 1.0
julia> P = VPolygon(M);
julia> P.vertices
3-element Array{Array{Float64,1},1}:
[0.0, 0.0]
[1.0, 0.0]
[0.0, 1.0]LazySets.σ — Methodσ(d::AbstractVector, P::VPolygon)Return the support vector of a polygon in a given direction.
Input
d– directionP– polygon in vertex representation
Output
The support vector in the given direction. If the direction has norm zero, the first vertex is returned.
Algorithm
This implementation uses a binary search algorithm when the polygon has more than ten vertices and a brute-force search when it has ten or less. For the brute-force search, it compares the projection of each vector along the given direction and runs in $O(n)$ where $n$ is the number of vertices. For the binary search the algorithm runs in $O(log n)$. We follow this implementation based on an algorithm described in [1].
[1] Joseph O'Rourke, Computational Geometry in C (2nd Edition)
Base.:∈ — Method∈(x::AbstractVector, P::VPolygon)Check whether a given point is contained in a polygon in vertex representation.
Input
x– point/vectorP– polygon in vertex representation
Output
true iff $x ∈ P$.
Algorithm
This implementation exploits that the polygon's vertices are sorted in counter-clockwise fashion. Under this assumption we can just check if the vertex lies on the left of each edge, using the dot product.
Examples
julia> P = VPolygon([[2.0, 3.0], [3.0, 1.0], [5.0, 1.0], [4.0, 5.0]];
apply_convex_hull=false);
julia> [4.5, 3.1] ∈ P
false
julia> [4.5, 3.0] ∈ P
true
julia> [4.4, 3.4] ∈ P # point lies on the edge
trueLazySets.an_element — Methodan_element(P::VPolygon)Return some element of a polygon in vertex representation.
Input
P– polygon in vertex representation
Output
The first vertex of the polygon in vertex representation.
Base.rand — Methodrand(::Type{VPolygon}; [N]::Type{<:Real}=Float64, [dim]::Int=2,
[rng]::AbstractRNG=GLOBAL_RNG, [seed]::Union{Int, Nothing}=nothing)Create a random polygon in vertex representation.
Input
VPolygon– type for dispatchN– (optional, default:Float64) numeric typedim– (optional, default: 2) dimensionrng– (optional, default:GLOBAL_RNG) random number generatorseed– (optional, default:nothing) seed for reseedingnum_vertices– (optional, default:-1) number of vertices of the polygon (see comment below)
Output
A random polygon in vertex representation.
Algorithm
We follow the idea here based on P. Valtr. Probability that n random points are in convex position. There is also a nice video available here.
The number of vertices can be controlled with the argument num_vertices. For a negative value we choose a random number in the range 3:10.
LazySets.vertices_list — Methodvertices_list(P::VPolygon)Return the list of vertices of a convex polygon in vertex representation.
Input
P– a polygon vertex representation
Output
List of vertices.
LazySets.tohrep — Methodtohrep(P::VPolygon{N}, ::Type{HPOLYGON}=HPolygon
) where {N, HPOLYGON<:AbstractHPolygon}Build a constraint representation of the given polygon.
Input
P– polygon in vertex representationHPOLYGON– (optional, default:HPolygon) type of target polygon
Output
The same polygon but in constraint representation, an AbstractHPolygon.
Algorithm
The algorithms consists of adding an edge for each consecutive pair of vertices. Since the vertices are already ordered in counter-clockwise fashion (CWW), the constraints will be sorted automatically (CCW) if we start with the first edge between the first and second vertex.
LazySets.tovrep — Methodtovrep(P::VPolygon)Build a vertex representation of the given polygon.
Input
P– polygon in vertex representation
Output
The identity, i.e., the same polygon instance.
LazySets.constraints_list — Methodconstraints_list(P::VPolygon)Return the list of constraints defining a polygon in V-representation.
Input
P– polygon in V-representation
Output
The list of constraints of the polygon.
Algorithm
First the H-representation of $P$ is computed, then its list of constraints is returned.
LazySets.translate — Methodtranslate(P::VPolygon, v::AbstractVector)Translate (i.e., shift) a polygon in vertex representation by a given vector.
Input
P– polygon in vertex representationv– translation vector
Output
A translated polygon in vertex representation.
Algorithm
We add the vector to each vertex of the polygon.
LazySets.remove_redundant_vertices — Methodremove_redundant_vertices(P::VPolygon;
[algorithm]::String="monotone_chain")Return the polygon obtained by removing the redundant vertices of the given polygon.
Input
P– polygon in vertex representationalgorithm– (optional, default: "monotone_chain") the algorithm used to compute the convex hull
Output
A new polygon such that its vertices are the convex hull of the given polygon.
Algorithm
A convex hull algorithm is used to compute the convex hull of the vertices of the given input polygon P; see ?convex_hull for details on the available algorithms. The vertices of the output polygon are sorted in counter-clockwise fashion.
LazySets.remove_redundant_vertices! — Methodremove_redundant_vertices!(P::VPolygon;
[algorithm]::String="monotone_chain")Remove the redundant vertices of the given polygon.
Input
P– polygon in vertex representationalgorithm– (optional, default: "monotone_chain") the algorithm used to compute the convex hull
Output
A new polygon such that its vertices are the convex hull of the given polygon.
Algorithm
A convex hull algorithm is used to compute the convex hull of the vertices of the given input polygon P; see ?convex_hull for details on the available algorithms. The vertices of the output polygon are sorted in counter-clockwise fashion.
Inherited from LazySet:
Inherited from AbstractPolyhedron:
Inherited from AbstractPolytope:
Inherited from AbstractPolygon: