LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
LSST Data Management Base Package
|
Box
represents a rectangle in spherical coordinate space that contains its boundary.
More...
#include <Box.h>
Public Member Functions | |
Box () | |
This constructor creates an empty box. More... | |
Box (LonLat const &p) | |
This constructor creates a box containing a single point. More... | |
Box (LonLat const &p1, LonLat const &p2) | |
This constructor creates a box spanning the longitude interval [p1.getLon(), p2.getLon()] and latitude interval [p1.getLat(), p2.getLat()]. More... | |
Box (LonLat const &p, Angle w, Angle h) | |
This constructor creates a box with center p, half-width (in longitude angle) w and half-height (in latitude angle) h. More... | |
Box (NormalizedAngleInterval const &lon, AngleInterval const &lat) | |
This constructor creates a box spanning the given longitude and latitude intervals. More... | |
bool | operator== (Box const &b) const |
Two boxes are equal if they contain the same points. More... | |
bool | operator!= (Box const &b) const |
bool | operator== (LonLat const &p) const |
A box is equal to a point p if it contains only p. More... | |
bool | operator!= (LonLat const &p) const |
NormalizedAngleInterval const & | getLon () const |
getLon returns the longitude interval of this box. More... | |
AngleInterval const & | getLat () const |
getLat returns the latitude interval of this box. More... | |
bool | isEmpty () const |
isEmpty returns true if this box does not contain any points. More... | |
bool | isFull () const |
isFull returns true if this box contains all points on the unit sphere. More... | |
LonLat | getCenter () const |
getCenter returns the center of this box. More... | |
NormalizedAngle | getWidth () const |
getWidth returns the width in longitude angle of this box. More... | |
Angle | getHeight () const |
getHeight returns the height in latitude angle of this box. More... | |
Box & | clipTo (LonLat const &x) |
clipTo shrinks this box until it contains only x. More... | |
Box & | clipTo (Box const &x) |
x.clipTo(y) sets x to the smallest box containing the intersection of x and y. More... | |
Box | clippedTo (LonLat const &x) const |
clippedTo returns the intersection of this box and x. More... | |
Box | clippedTo (Box const &x) const |
clippedTo returns the smallest box containing the intersection of this box and x. More... | |
Box & | dilateBy (Angle r) |
dilateBy minimally expands this Box to include all points within angular separation r of its boundary. More... | |
Box | dilatedBy (Angle r) const |
Box & | dilateBy (Angle w, Angle h) |
dilateBy morphologically dilates or erodes the longitude interval of this box by w, and the latitude interval of this box by h. More... | |
Box | dilatedBy (Angle w, Angle h) const |
Box & | erodeBy (Angle r) |
Box & | erodeBy (Angle w, Angle h) |
Box | erodedBy (Angle r) const |
Box | erodedBy (Angle w, Angle h) const |
Relationship | relate (LonLat const &p) const |
double | getArea () const |
getArea returns the area of this box in steradians. More... | |
std::unique_ptr< Region > | clone () const override |
clone returns a deep copy of this region. More... | |
Box | getBoundingBox () const override |
getBoundingBox returns a bounding-box for this region. More... | |
Box3d | getBoundingBox3d () const override |
getBoundingBox3d returns a 3-dimensional bounding-box for this region. More... | |
Circle | getBoundingCircle () const override |
getBoundingCircle returns a bounding-circle for this region. More... | |
bool | contains (UnitVector3d const &v) const override |
contains tests whether the given unit vector is inside this region. More... | |
Relationship | relate (Region const &r) const override |
Relationship | relate (Box const &b) const override |
Relationship | relate (Circle const &) const override |
Relationship | relate (ConvexPolygon const &) const override |
Relationship | relate (Ellipse const &) const override |
std::vector< uint8_t > | encode () const override |
encode serializes this region into an opaque byte string. More... | |
virtual bool | contains (UnitVector3d const &) const=0 |
contains tests whether the given unit vector is inside this region. More... | |
bool | contains (double x, double y, double z) const |
contains tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region. More... | |
bool | contains (double lon, double lat) const |
contains tests whether the unit vector defined by the given longitude and latitude coordinates (in radians) is inside this region. More... | |
bool | contains (LonLat const &x) const |
bool | contains (Box const &x) const |
bool | isDisjointFrom (LonLat const &x) const |
bool | isDisjointFrom (Box const &x) const |
bool | intersects (LonLat const &x) const |
bool | intersects (Box const &x) const |
bool | isWithin (LonLat const &x) const |
bool | isWithin (Box const &x) const |
Box & | expandTo (LonLat const &x) |
Box & | expandTo (Box const &x) |
Box | expandedTo (LonLat const &x) const |
Box | expandedTo (Box const &x) const |
Static Public Member Functions | |
static Box | fromDegrees (double lon1, double lat1, double lon2, double lat2) |
static Box | fromRadians (double lon1, double lat1, double lon2, double lat2) |
static Box | empty () |
static Box | full () |
static NormalizedAngle | halfWidthForCircle (Angle r, Angle lat) |
halfWidthForCircle computes the half-width of bounding boxes for circles with radius r and centers at the given latitude. More... | |
static NormalizedAngleInterval | allLongitudes () |
allLongitudes returns a normalized angle interval containing all valid longitude angles. More... | |
static AngleInterval | allLatitudes () |
allLatitudes returns an angle interval containing all valid latitude angles. More... | |
static std::unique_ptr< Box > | decode (std::vector< uint8_t > const &s) |
static std::unique_ptr< Box > | decode (uint8_t const *buffer, size_t n) |
Static Public Attributes | |
static constexpr uint8_t | TYPE_CODE = 'b' |
Box
represents a rectangle in spherical coordinate space that contains its boundary.
A box can be empty or full (equal to the entire unit sphere), and may contain just a single point. Besides the usual rectangular regions, a box can also represent polar caps or annuli (i.e. when the box spans all longitudes).
For any instance b of this class, the following properties hold:
|
inline |
|
inlineexplicit |
This constructor creates a box with center p, half-width (in longitude angle) w and half-height (in latitude angle) h.
Definition at line 114 of file Box.h.
|
inline |
|
inlinestatic |
|
inlinestatic |
allLongitudes
returns a normalized angle interval containing all valid longitude angles.
x.clipTo(y)
sets x to the smallest box containing the intersection of x and y.
The result is not always unique, and x.clipTo(y)
is not guaranteed to equal y.clipTo(x)
.
Definition at line 227 of file Box.h.
|
inlineoverridevirtual |
clone
returns a deep copy of this region.
Implements lsst::sphgeom::Region.
|
inline |
contains
returns true if the intersection of this box and x is equal to x.
bool lsst::sphgeom::Region::contains | ( | double | lon, |
double | lat | ||
) | const |
contains
tests whether the unit vector defined by the given longitude and latitude coordinates (in radians) is inside this region.
bool lsst::sphgeom::Region::contains | ( | double | x, |
double | y, | ||
double | z | ||
) | const |
|
inline |
|
virtual |
contains
tests whether the given unit vector is inside this region.
Implements lsst::sphgeom::Region.
|
inlineoverridevirtual |
contains
tests whether the given unit vector is inside this region.
Implements lsst::sphgeom::Region.
|
inlinestatic |
|
static |
decode
deserializes a Box from a byte string produced by encode.
Definition at line 459 of file Box.cc.
dilateBy
minimally expands this Box to include all points within angular separation r of its boundary.
If this box is empty or full, or if r is non-positive, there is no effect.
Definition at line 78 of file Box.cc.
dilateBy
morphologically dilates or erodes the longitude interval of this box by w, and the latitude interval of this box by h.
If w is positive, the longitude interval is dilated by [-w,w]. If w is zero, the corresponding interval is not modified, and if it is negative, the longitude interval is eroded by [w,-w]. The action of h on the latitude interval is analogous.
If this box is empty or full, there is no effect. Furthermore, a box containing the north or south pole is not considered to have a latitude boundary there, so that eroding it will not necessarily remove the pole.
If the desired outcome is the bounding box of points within some angular separation r of this box, then dilateBy(r)
must be called, not dilateBy(r, r)
.
Definition at line 101 of file Box.cc.
|
inlinestatic |
|
overridevirtual |
encode
serializes this region into an opaque byte string.
Byte strings emitted by encode can be deserialized with decode.
Implements lsst::sphgeom::Region.
Definition at line 447 of file Box.cc.
expandTo
minimally expands this box to contain x. The result is not always unique, and x.expandTo(y)
is not guaranteed to equal y.expandTo(x)
.
Definition at line 252 of file Box.h.
|
inlinestatic |
Definition at line 59 of file Box.h.
|
inlinestatic |
|
inlinestatic |
double lsst::sphgeom::Box::getArea | ( | ) | const |
getArea
returns the area of this box in steradians.
Definition at line 115 of file Box.cc.
|
inlineoverridevirtual |
getBoundingBox
returns a bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 307 of file Box.h.
|
overridevirtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 127 of file Box.cc.
|
overridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
Definition at line 187 of file Box.cc.
|
inline |
|
inline |
getHeight
returns the height in latitude angle of this box.
It is negative or NaN for empty boxes.
Definition at line 169 of file Box.h.
|
inline |
|
inline |
|
inline |
|
static |
halfWidthForCircle
computes the half-width of bounding boxes for circles with radius r
and centers at the given latitude.
If r is non-positive, the result is zero, and if |lat| + r >= PI/2, the result is PI.
Definition at line 43 of file Box.cc.
|
inline |
intersects
returns true if the intersection of this box and x is non-empty.
|
inline |
intersects
returns true if the intersection of this box and x is non-empty.
|
inline |
|
inline |
|
inline |
isEmpty
returns true if this box does not contain any points.
Definition at line 151 of file Box.h.
|
inline |
|
inline |
isWithin
returns true if the intersection of this box and x is this box.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineoverridevirtual |
relate
computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.S & WITHIN
is set only if B contains all points in A.Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.
These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate
by replacing itself and/or the argument with a simplified bounding region.
Implements lsst::sphgeom::Region.
Definition at line 322 of file Box.h.
|
overridevirtual |
relate
computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.S & WITHIN
is set only if B contains all points in A.Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.
These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate
by replacing itself and/or the argument with a simplified bounding region.
Implements lsst::sphgeom::Region.
Definition at line 318 of file Box.cc.
|
overridevirtual |
relate
computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.S & WITHIN
is set only if B contains all points in A.Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.
These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate
by replacing itself and/or the argument with a simplified bounding region.
Implements lsst::sphgeom::Region.
Definition at line 437 of file Box.cc.
|
overridevirtual |
relate
computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.S & WITHIN
is set only if B contains all points in A.Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.
These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate
by replacing itself and/or the argument with a simplified bounding region.
Implements lsst::sphgeom::Region.
Definition at line 442 of file Box.cc.
|
inline |
|
inlineoverridevirtual |
relate
computes the spatial relationships between this region A and another region B. The return value S is a bitset with the following properties:
S & DISJOINT
is set only if A and B do not have any points in common.S & CONTAINS
is set only if A contains all points in B.S & WITHIN
is set only if B contains all points in A.Said another way: if the CONTAINS, WITHIN or DISJOINT bit is set, then the corresponding spatial relationship between the two regions holds conclusively. If it is not set, the relationship may or may not hold.
These semantics allow for conservative relationship computations. In particular, a Region may choose to implement relate
by replacing itself and/or the argument with a simplified bounding region.
Implements lsst::sphgeom::Region.
|
staticconstexpr |