LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
Public Member Functions | List of all members
lsst::sphgeom::Interval< Derived, Scalar > Class Template Reference

Interval represents a closed interval of the real numbers by its upper and lower bounds. More...

#include <Interval.h>

Public Member Functions

 Interval ()
 This constructor creates an empty interval. More...
 
 Interval (Scalar x)
 This constructor creates a closed interval containing only x. More...
 
 Interval (Scalar x, Scalar y)
 This constructor creates an interval from the given endpoints. More...
 
bool operator== (Interval const &i) const
 Two closed intervals are equal if their endpoints are the same, or both are empty. More...
 
bool operator!= (Interval const &i) const
 
bool operator== (Scalar x) const
 A closed interval is equal to a point x if both endpoints equal x. More...
 
bool operator!= (Scalar x) const
 
Scalar getA () const
 getA returns the lower endpoint of this interval. More...
 
Scalar getB () const
 getB returns the upper endpoint of this interval. More...
 
bool isEmpty () const
 isEmpty returns true if this interval does not contain any points. More...
 
Scalar getCenter () const
 getCenter returns the center of this interval. More...
 
Scalar getSize () const
 getSize returns the size (length, width) of this interval. More...
 
IntervaldilateBy (Scalar x)
 For positive x, dilateBy morphologically dilates this interval by [-x,x], which is equivalent to the taking the Minkowski sum with [-x,x]. More...
 
IntervalerodeBy (Scalar x)
 
Derived dilatedBy (Scalar x) const
 
Derived erodedBy (Scalar x) const
 
bool contains (Scalar x) const
 
bool contains (Interval const &x) const
 
bool isDisjointFrom (Scalar x) const
 
bool isDisjointFrom (Interval const &x) const
 
bool intersects (Scalar x) const
 
bool intersects (Interval const &x) const
 
bool isWithin (Scalar x) const
 
bool isWithin (Interval const &x) const
 
Relationship relate (Scalar x) const
 
Relationship relate (Interval const &x) const
 
IntervalclipTo (Scalar x)
 
IntervalclipTo (Interval const &x)
 
Derived clippedTo (Scalar x) const
 
Derived clippedTo (Interval const &x) const
 
IntervalexpandTo (Scalar x)
 
IntervalexpandTo (Interval const &x)
 
Derived expandedTo (Scalar x) const
 
Derived expandedTo (Interval const &x) const
 

Detailed Description

template<typename Derived, typename Scalar>
class lsst::sphgeom::Interval< Derived, Scalar >

Interval represents a closed interval of the real numbers by its upper and lower bounds.

It is parameterized by the Scalar type, which must be constructible from a double.

An interval with identical upper and lower bounds contains a single point, and is equal to that scalar bound.

An interval with an upper bound less than its lower bound is empty (contains no points), as are intervals with NaN as either bound.

Definition at line 48 of file Interval.h.

Constructor & Destructor Documentation

◆ Interval() [1/3]

template<typename Derived , typename Scalar >
lsst::sphgeom::Interval< Derived, Scalar >::Interval ( )
inline

This constructor creates an empty interval.

Definition at line 51 of file Interval.h.

51: _a(1.0), _b(0.0) {}

◆ Interval() [2/3]

template<typename Derived , typename Scalar >
lsst::sphgeom::Interval< Derived, Scalar >::Interval ( Scalar  x)
inlineexplicit

This constructor creates a closed interval containing only x.

Definition at line 54 of file Interval.h.

54: _a(x), _b(x) {}
double x

◆ Interval() [3/3]

template<typename Derived , typename Scalar >
lsst::sphgeom::Interval< Derived, Scalar >::Interval ( Scalar  x,
Scalar  y 
)
inline

This constructor creates an interval from the given endpoints.

Definition at line 57 of file Interval.h.

57: _a(x), _b(y) {}
int y
Definition: SpanSet.cc:48

Member Function Documentation

◆ clippedTo() [1/2]

template<typename Derived , typename Scalar >
Derived lsst::sphgeom::Interval< Derived, Scalar >::clippedTo ( Interval< Derived, Scalar > const &  x) const
inline

clippedTo returns the intersection of this interval and x.

Definition at line 185 of file Interval.h.

185 {
186 return Interval(*this).clipTo(x);
187 }
Interval()
This constructor creates an empty interval.
Definition: Interval.h:51

◆ clippedTo() [2/2]

template<typename Derived , typename Scalar >
Derived lsst::sphgeom::Interval< Derived, Scalar >::clippedTo ( Scalar  x) const
inline

clippedTo returns the intersection of this interval and x.

Definition at line 183 of file Interval.h.

183{ return Interval(*this).clipTo(x); }

◆ clipTo() [1/2]

template<typename Derived , typename Scalar >
Interval & lsst::sphgeom::Interval< Derived, Scalar >::clipTo ( Interval< Derived, Scalar > const &  x)
inline

clipTo shrinks this interval until all its points are in x.

Definition at line 170 of file Interval.h.

170 {
171 if (x.isEmpty()) {
172 *this = x;
173 } else if (!isEmpty()) {
174 _a = std::max(_a, x._a);
175 _b = std::min(_b, x._b);
176 }
177 return *this;
178 }
bool isEmpty() const
isEmpty returns true if this interval does not contain any points.
Definition: Interval.h:83
T max(T... args)
T min(T... args)

◆ clipTo() [2/2]

template<typename Derived , typename Scalar >
Interval & lsst::sphgeom::Interval< Derived, Scalar >::clipTo ( Scalar  x)
inline

clipTo shrinks this interval until all its points are in x.

Definition at line 159 of file Interval.h.

159 {
160 if (x != x) {
161 _a = x;
162 _b = x;
163 } else {
164 _a = std::max(_a, x);
165 _b = std::min(_b, x);
166 }
167 return *this;
168 }

◆ contains() [1/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::contains ( Interval< Derived, Scalar > const &  x) const
inline

contains returns true if the intersection of this interval and x is equal to x.

Definition at line 102 of file Interval.h.

102 {
103 if (x.isEmpty()) {
104 return true;
105 } else if (isEmpty()) {
106 return false;
107 }
108 return _a <= x._a && _b >= x._b;
109 }

◆ contains() [2/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::contains ( Scalar  x) const
inline

contains returns true if the intersection of this interval and x is equal to x.

Definition at line 98 of file Interval.h.

98 {
99 return (_a <= x && x <= _b) || x != x;
100 }

◆ dilateBy()

template<typename Derived , typename Scalar >
Interval & lsst::sphgeom::Interval< Derived, Scalar >::dilateBy ( Scalar  x)
inline

For positive x, dilateBy morphologically dilates this interval by [-x,x], which is equivalent to the taking the Minkowski sum with [-x,x].

For negative x, it morphologically erodes this interval by [x,-x]. If x is zero or NaN, or this interval is empty, there is no effect.

Definition at line 230 of file Interval.h.

230 {
231 if (x == x && !isEmpty()) {
232 _a = _a - x;
233 _b = _b + x;
234 }
235 return *this;
236 }

◆ dilatedBy()

template<typename Derived , typename Scalar >
Derived lsst::sphgeom::Interval< Derived, Scalar >::dilatedBy ( Scalar  x) const
inline

Definition at line 239 of file Interval.h.

239{ return Interval(*this).dilateBy(x); }

◆ erodeBy()

template<typename Derived , typename Scalar >
Interval & lsst::sphgeom::Interval< Derived, Scalar >::erodeBy ( Scalar  x)
inline

Definition at line 238 of file Interval.h.

238{ return dilateBy(-x); }
Interval & dilateBy(Scalar x)
For positive x, dilateBy morphologically dilates this interval by [-x,x], which is equivalent to the ...
Definition: Interval.h:230

◆ erodedBy()

template<typename Derived , typename Scalar >
Derived lsst::sphgeom::Interval< Derived, Scalar >::erodedBy ( Scalar  x) const
inline

Definition at line 240 of file Interval.h.

240{ return Interval(*this).erodeBy(x); }

◆ expandedTo() [1/2]

template<typename Derived , typename Scalar >
Derived lsst::sphgeom::Interval< Derived, Scalar >::expandedTo ( Interval< Derived, Scalar > const &  x) const
inline

expandedTo returns the smallest interval containing the union of this interval and x.

Definition at line 220 of file Interval.h.

220 {
221 return Interval(*this).expandTo(x);
222 }

◆ expandedTo() [2/2]

template<typename Derived , typename Scalar >
Derived lsst::sphgeom::Interval< Derived, Scalar >::expandedTo ( Scalar  x) const
inline

expandedTo returns the smallest interval containing the union of this interval and x.

Definition at line 218 of file Interval.h.

218{ return Interval(*this).expandTo(x); }

◆ expandTo() [1/2]

template<typename Derived , typename Scalar >
Interval & lsst::sphgeom::Interval< Derived, Scalar >::expandTo ( Interval< Derived, Scalar > const &  x)
inline

expandTo minimally expands this interval to contain x.

Definition at line 204 of file Interval.h.

204 {
205 if (isEmpty()) {
206 *this = x;
207 } else if (!x.isEmpty()) {
208 _a = std::min(_a, x._a);
209 _b = std::max(_b, x._b);
210 }
211 return *this;
212 }

◆ expandTo() [2/2]

template<typename Derived , typename Scalar >
Interval & lsst::sphgeom::Interval< Derived, Scalar >::expandTo ( Scalar  x)
inline

expandTo minimally expands this interval to contain x.

Definition at line 192 of file Interval.h.

192 {
193 if (isEmpty()) {
194 _a = x;
195 _b = x;
196 } else if (x < _a) {
197 _a = x;
198 } else if (x > _b) {
199 _b = x;
200 }
201 return *this;
202 }

◆ getA()

template<typename Derived , typename Scalar >
Scalar lsst::sphgeom::Interval< Derived, Scalar >::getA ( ) const
inline

getA returns the lower endpoint of this interval.

The return value for empty intervals is arbitrary.

Definition at line 76 of file Interval.h.

76{ return _a; }

◆ getB()

template<typename Derived , typename Scalar >
Scalar lsst::sphgeom::Interval< Derived, Scalar >::getB ( ) const
inline

getB returns the upper endpoint of this interval.

The return value for empty intervals is arbitrary.

Definition at line 80 of file Interval.h.

80{ return _b; }

◆ getCenter()

template<typename Derived , typename Scalar >
Scalar lsst::sphgeom::Interval< Derived, Scalar >::getCenter ( ) const
inline

getCenter returns the center of this interval.

It is arbitrary for empty intervals.

Definition at line 89 of file Interval.h.

89{ return 0.5 * (_a + _b); }

◆ getSize()

template<typename Derived , typename Scalar >
Scalar lsst::sphgeom::Interval< Derived, Scalar >::getSize ( ) const
inline

getSize returns the size (length, width) of this interval.

It is zero for single-point intervals, and NaN or negative for empty intervals.

Definition at line 93 of file Interval.h.

93{ return _b - _a; }

◆ intersects() [1/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::intersects ( Interval< Derived, Scalar > const &  x) const
inline

intersects returns true if the intersection of this interval and x is non-empty.

Definition at line 132 of file Interval.h.

132 {
133 return !isDisjointFrom(x);
134 }
bool isDisjointFrom(Scalar x) const
Definition: Interval.h:115

◆ intersects() [2/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::intersects ( Scalar  x) const
inline

intersects returns true if the intersection of this interval and x is non-empty.

Definition at line 130 of file Interval.h.

130{ return _a <= x && x <= _b; }

◆ isDisjointFrom() [1/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::isDisjointFrom ( Interval< Derived, Scalar > const &  x) const
inline

isDisjointFrom returns true if the intersection of this interval and x is empty.

Definition at line 119 of file Interval.h.

119 {
120 if (isEmpty() || x.isEmpty()) {
121 return true;
122 }
123 return _a > x._b || _b < x._a;
124 }

◆ isDisjointFrom() [2/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::isDisjointFrom ( Scalar  x) const
inline

isDisjointFrom returns true if the intersection of this interval and x is empty.

Definition at line 115 of file Interval.h.

115 {
116 return !intersects(x);
117 }
bool intersects(Scalar x) const
Definition: Interval.h:130

◆ isEmpty()

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::isEmpty ( ) const
inline

isEmpty returns true if this interval does not contain any points.

Definition at line 83 of file Interval.h.

83 {
84 return !(_a <= _b); // returns true when _a and/or _b is NaN
85 }

◆ isWithin() [1/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::isWithin ( Interval< Derived, Scalar > const &  x) const
inline

isWithin returns true if the intersection of this interval and x is this interval.

Definition at line 144 of file Interval.h.

144 {
145 return x.contains(*this);
146 }

◆ isWithin() [2/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::isWithin ( Scalar  x) const
inline

isWithin returns true if the intersection of this interval and x is this interval.

Definition at line 140 of file Interval.h.

140 {
141 return (_a == x && _b == x) || isEmpty();
142 }

◆ operator!=() [1/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::operator!= ( Interval< Derived, Scalar > const &  i) const
inline

Definition at line 65 of file Interval.h.

65{ return !(*this == i); }

◆ operator!=() [2/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::operator!= ( Scalar  x) const
inline

Definition at line 72 of file Interval.h.

72{ return !(*this == x); }

◆ operator==() [1/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::operator== ( Interval< Derived, Scalar > const &  i) const
inline

Two closed intervals are equal if their endpoints are the same, or both are empty.

Definition at line 61 of file Interval.h.

61 {
62 return (_a == i._a && _b == i._b) || (i.isEmpty() && isEmpty());
63 }

◆ operator==() [2/2]

template<typename Derived , typename Scalar >
bool lsst::sphgeom::Interval< Derived, Scalar >::operator== ( Scalar  x) const
inline

A closed interval is equal to a point x if both endpoints equal x.

Definition at line 68 of file Interval.h.

68 {
69 return (_a == x && _b == x) || (x != x && isEmpty());
70 }

◆ relate() [1/2]

template<typename Derived , typename Scalar >
Relationship lsst::sphgeom::Interval< Derived, Scalar >::relate ( Interval< Derived, Scalar > const &  x) const

relate returns a bitset S describing the spatial relationships between this interval and x. For each relation that holds, the bitwise AND of S and the corresponding Relationship will be non-zero.

Definition at line 269 of file Interval.h.

271{
272 if (isEmpty()) {
273 if (x.isEmpty()) {
274 return CONTAINS | DISJOINT | WITHIN;
275 }
276 return DISJOINT | WITHIN;
277 }
278 if (x.isEmpty()) {
279 return CONTAINS | DISJOINT;
280 }
281 if (_a == x._a && _b == x._b) {
282 return CONTAINS | WITHIN;
283 }
284 if (_a > x._b || _b < x._a) {
285 return DISJOINT;
286 }
287 if (_a <= x._a && _b >= x._b) {
288 return CONTAINS;
289 }
290 if (x._a <= _a && x._b >= _b) {
291 return WITHIN;
292 }
293 return INTERSECTS;
294}

◆ relate() [2/2]

template<typename Derived , typename Scalar >
Relationship lsst::sphgeom::Interval< Derived, Scalar >::relate ( Scalar  x) const

relate returns a bitset S describing the spatial relationships between this interval and x. For each relation that holds, the bitwise AND of S and the corresponding Relationship will be non-zero.

Definition at line 249 of file Interval.h.

249 {
250 if (isEmpty()) {
251 if (x != x) {
252 return CONTAINS | DISJOINT | WITHIN;
253 }
254 return DISJOINT | WITHIN;
255 }
256 if (x != x) {
257 return CONTAINS | DISJOINT;
258 }
259 if (_a == x && _b == x) {
260 return CONTAINS | WITHIN;
261 }
262 if (intersects(x)) {
263 return CONTAINS;
264 }
265 return DISJOINT;
266}

The documentation for this class was generated from the following file: