diff --git a/src/ReachSets/AbstractReachSet.jl b/src/ReachSets/AbstractReachSet.jl index 6793c5f7c..1006a0d8e 100644 --- a/src/ReachSets/AbstractReachSet.jl +++ b/src/ReachSets/AbstractReachSet.jl @@ -258,16 +258,22 @@ end # Concrete intersection methods # ------------------------------ -function intersection(R::AbstractReachSet, S::AbstractReachSet) - return _intersection(set(R), set(S), FallbackIntersection()) -end -function _intersection(R::AbstractReachSet, S::AbstractReachSet, method::AbstractIntersectionMethod) - return _intersection(set(R), set(S), method) +function intersection(R::AbstractReachSet, S::AbstractReachSet, + method::AbstractIntersectionMethod=FallbackIntersection()) + T1 = tspan(R) + T2 = tspan(S) + T = T1 ∩ T2 + if isempty(T) + throw(ArgumentError("cannot intersect reach sets with disjoint time intervals")) + end + + cap = _intersection(set(R), set(S), method) + return ReachSet(cap, T) end # fallback methods for reach-sets @commutative function _intersection(R::AbstractReachSet, X::LazySet, - method::AbstractIntersectionMethod) + method::AbstractIntersectionMethod=FallbackIntersection()) return _intersection(set(R), X, method) end diff --git a/src/ReachSets/TaylorModelReachSet.jl b/src/ReachSets/TaylorModelReachSet.jl index 06030a2ba..9f28ed2df 100644 --- a/src/ReachSets/TaylorModelReachSet.jl +++ b/src/ReachSets/TaylorModelReachSet.jl @@ -69,10 +69,6 @@ end # ====================== # for TMs, we overapproximate with a zonotope -function _intersection(R::TaylorModelReachSet, Y::LazySet) - return _intersection(R, Y, FallbackIntersection()) -end - function _intersection(R::TaylorModelReachSet, Y::LazySet, ::FallbackIntersection) X = set(overapproximate(R, Zonotope)) return intersection(X, Y)