Translation
LazySets.Translation — TypeTranslation{N, S<:LazySet{N}, VN<:AbstractVector{N}}
<: AbstractAffineMap{N, S}Type that represents a lazy translation.
The translation of set X along vector v is the map:
\[x ↦ x + v,\qquad x ∈ X\]
A translation is a special case of an affine map $A x + b, x ∈ X$ where the linear map $A$ is the identity matrix and the translation vector $b$ is $v$.
Fields
X– setv– vector that defines the translation
Notes
Translation preserves convexity: if X is convex, then any translation of X is convex as well.
The convenience aliases ⊕ and + are also available. ⊕ can be typed by \oplus<tab>.
Example
julia> X = BallInf([2.0, 2.0, 2.0], 1.0);
julia> v = [1.0, 0.0, 0.0]; # translation along dimension 1
julia> tr = Translation(X, v);
julia> typeof(tr)
Translation{Float64, BallInf{Float64, Vector{Float64}}, Vector{Float64}}
julia> tr.X
BallInf{Float64, Vector{Float64}}([2.0, 2.0, 2.0], 1.0)
julia> tr.v
3-element Vector{Float64}:
1.0
0.0
0.0Both the sum operator + and the Minkowski-sum operator ⊕ are overloaded to create translations:
julia> X + v == X ⊕ v == Translation(X, v)
trueThe translation of a translation is performed immediately:
julia> tr = (X + v) + v
Translation{Float64, BallInf{Float64, Vector{Float64}}, Vector{Float64}}(BallInf{Float64, Vector{Float64}}([2.0, 2.0, 2.0], 1.0), [2.0, 0.0, 0.0])
julia> tr.v
3-element Vector{Float64}:
2.0
0.0
0.0The dimension of a translation is obtained with the dim function:
julia> dim(tr)
3For the support vector (resp. support function) along vector d, use σ and ρ, respectively:
julia> σ([1.0, 0.0, 0.0], tr)
3-element Vector{Float64}:
5.0
2.0
2.0
julia> ρ([1.0, 0.0, 0.0], tr)
5.0See the docstring of each of these functions for details.
The an_element function is useful to obtain an element of a translation:
julia> e = an_element(tr)
3-element Vector{Float64}:
4.0
2.0
2.0The lazy linear map of a translation is an affine map, since the following simplification rule applies: $M * (X ⊕ v) = (M * X) ⊕ (M * v)$:
julia> using LinearAlgebra: I
julia> M = Matrix(2.0I, 3, 3);
julia> Q = M * tr;
julia> Q isa AffineMap && Q.M == M && Q.X == tr.X && Q.v == 2 * tr.v
trueUse the isempty method to check whether the translation is empty:
julia> isempty(tr)
falseThe list of constraints of the translation of a polyhedral set (a set whose constraints_list is available) can be computed from a lazy translation:
julia> constraints_list(tr)
6-element Vector{HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}}:
HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}([1.0, 0.0, 0.0], 5.0)
HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}([0.0, 1.0, 0.0], 3.0)
HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}([0.0, 0.0, 1.0], 3.0)
HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}([-1.0, 0.0, 0.0], -3.0)
HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}([0.0, -1.0, 0.0], -1.0)
HalfSpace{Float64, ReachabilityBase.Arrays.SingleEntryVector{Float64}}([0.0, 0.0, -1.0], -1.0)LazySets.API.ρ — Methodρ(d::AbstractVector, tr::Translation)Evaluate the support function of a translation.
Input
d– directiontr– translation of a set
Output
The evaluation of the support function in the given direction.
LazySets.API.σ — Methodσ(d::AbstractVector, tr::Translation)Return a support vector of a translation.
Input
d– directiontr– translation of a set
Output
A support vector in the given direction. If the direction has norm zero, the result depends on the wrapped set.
LazySets.API.an_element — Methodan_element(tr::Translation)Return some element of a translation.
Input
tr– translation of a set
Output
An element in the translation.
Notes
This function first asks for an_element of the wrapped set, then translates this element according to the given translation vector.
LazySets.API.constraints_list — Methodconstraints_list(tr::Translation)Return a list of constraints of the translation of a set.
Input
tr– translation of a polyhedron
Output
A list of constraints of the translation.
Notes
We assume that the set wrapped by the lazy translation X offers a method constraints_list(⋅).
Algorithm
Let the translation be defined by the set of points y such that y = x + v for all x ∈ X. Then, each defining halfspace a⋅x ≤ b is transformed to a⋅y ≤ b + a⋅v.
LazySets.API.linear_map — Methodlinear_map(M::AbstractMatrix, tr::Translation)Concrete linear map of a translation.
Input
M– matrixtr– translation of a set
Output
A concrete set corresponding to the linear map. The type of the result depends on the type of the set wrapped by tr.
Algorithm
We compute affine_map(M, tr.X, M * tr.v).
Base.:∈ — Method∈(x::AbstractVector, tr::Translation)Check whether a given point is contained in the translation of a set.
Input
x– point/vectortr– translation of a set
Output
true iff $x ∈ tr$.
Algorithm
This implementation relies on the set-membership function for the wrapped set tr.X, since $x ∈ X ⊕ v$ iff $x - v ∈ X$.
LazySets.API.center — Methodcenter(tr::Translation)Return the center of the translation of a centrally-symmetric set.
Input
tr– translation of a centrally-symmetric set
Output
The translation of the center of the wrapped set by the translation vector.
Inherited from LazySet:
Inherited from AbstractAffineMap: