Line segment (LineSegment)
LazySets.LineSegment — TypeLineSegment{N, VN<:AbstractVector{N}} <: AbstractZonotope{N}Type that represents a line segment in 2D between two points $p$ and $q$.
Fields
p– first pointq– second point
Examples
A line segment along the $x = y$ diagonal:
julia> s = LineSegment([0., 0], [1., 1.])
LineSegment{Float64,Array{Float64,1}}([0.0, 0.0], [1.0, 1.0])
julia> dim(s)
2Use plot(s) to plot the extreme points of s and the line segment joining them. Membership test is computed with ∈ (in):
julia> [0., 0] ∈ s && [.25, .25] ∈ s && [1., 1] ∈ s && [.5, .25] ∉ s
trueWe can check the intersection with another line segment, and optionally compute a witness (which is just the common point in this case):
julia> sn = LineSegment([1., 0], [0., 1.])
LineSegment{Float64,Array{Float64,1}}([1.0, 0.0], [0.0, 1.0])
julia> isempty(s ∩ sn)
false
julia> is_intersection_empty(s, sn, true)
(false, [0.5, 0.5])LazySets.dim — Methoddim(L::LineSegment)Return the ambient dimension of a line segment.
Input
L– line segment
Output
The ambient dimension of the line segment, which is 2.
LazySets.σ — Methodσ(d::AbstractVector, L::LineSegment)Return the support vector of a line segment in a given direction.
Input
d– directionL– line segment
Output
The support vector in the given direction.
Algorithm
If the angle between the vector $q - p$ and $d$ is bigger than 90° and less than 270° (measured in counter-clockwise order), the result is $p$, otherwise it is $q$. If the angle is exactly 90° or 270°, or if the direction has norm zero, this implementation returns $q$.
Base.:∈ — Method∈(x::AbstractVector, L::LineSegment)Check whether a given point is contained in a line segment.
Input
x– point/vectorL– line segment
Output
true iff $x ∈ L$.
Algorithm
Let $L = (p, q)$ be the line segment with extremes $p$ and $q$, and let $x$ be the given point.
- A necessary condition for $x ∈ (p, q)$ is that the three points are aligned, thus their cross product should be zero.
- It remains to check that $x$ belongs to the box approximation of $L$. This amounts to comparing each coordinate with those of the extremes $p$ and $q$.
Notes
The algorithm is inspired from here.
LazySets.center — Methodcenter(L::LineSegment)Return the center of a line segment.
Input
L– line segment
Output
The center of the line segment.
LazySets.an_element — Methodan_element(L::LineSegment)Return some element of a line segment.
Input
L– line segment
Output
The first vertex of the line segment.
Base.rand — Methodrand(::Type{LineSegment}; [N]::Type{<:Real}=Float64, [dim]::Int=2,
[rng]::AbstractRNG=GLOBAL_RNG, [seed]::Union{Int, Nothing}=nothing)Create a random line segment.
Input
LineSegment– type for dispatchN– (optional, default:Float64) numeric typedim– (optional, default: 2) dimensionrng– (optional, default:GLOBAL_RNG) random number generatorseed– (optional, default:nothing) seed for reseeding
Output
A random line segment.
Algorithm
All numbers are normally distributed with mean 0 and standard deviation 1.
LazySets.halfspace_left — Methodhalfspace_left(L::LineSegment)Return a half-space describing the 'left' of a two-dimensional line segment through two points.
Input
L– line segment
Output
The half-space whose boundary goes through the two points p and q and which describes the left-hand side of the directed line segment pq.
LazySets.halfspace_right — Methodhalfspace_right(L::LineSegment)Return a half-space describing the 'right' of a two-dimensional line segment through two points.
Input
L– line segment
Output
The half-space whose boundary goes through the two points p and q and which describes the right-hand side of the directed line segment pq.
LazySets.vertices_list — Methodvertices_list(L::LineSegment)Return the list of vertices of a line segment.
Input
L– line segment
Output
The list of end points of the line segment.
LazySets.constraints_list — Methodconstraints_list(L::LineSegment)Return the list of constraints defining a line segment in 2D.
Input
L– line segment
Output
A vector of constraints that define the line segment.
Algorithm
$L$ is defined by 4 constraints. In this algorithm, the first two constraints are returned by $halfspace_right$ and $halfspace_left$, and the other two are obtained by considering the vector normal to the line segment that passes through each opposite vertex.
Notes
This function returns a vector of halfspaces. It does not return equality constraints.
LazySets.translate — Methodtranslate(L::LineSegment, v::AbstractVector)Translate (i.e., shift) a line segment by a given vector.
Input
L– line segmentv– translation vector
Output
A translated line segment.
Algorithm
We add the vector to both defining points of the line segment.
LazySets.generators — Methodgenerators(S::AbstractSingleton{N}) where {N}Return an (empty) iterator over the generators of a set with a single value.
Input
S– set with a single value
Output
An empty iterator.
generators(L::LineSegment{N}) where {N}Return an iterator over the (single) generator of a line segment.
Input
L– line segment
Output
A one-element iterator over the generator of L.
LazySets.genmat — Methodgenmat(L::LineSegment)
Return the generator matrix of a line segment.
Input
L– line segment
Output
A matrix with a single column representing the generator of L.
Inherited from LazySet:
Inherited from AbstractPolytope:
Inherited from AbstractCentrallySymmetricPolytope:
Inherited from AbstractZonotope: