lsst.sphgeom gd5d1ca8e18+f0a1800e64
|
#include <Box.h>
Public Member Functions | |
Box () | |
This constructor creates an empty box. | |
Box (LonLat const &p) | |
This constructor creates a box containing a single point. | |
Box (LonLat const &p1, LonLat const &p2) | |
Box (LonLat const &p, Angle w, Angle h) | |
Box (NormalizedAngleInterval const &lon, AngleInterval const &lat) | |
bool | operator== (Box const &b) const |
Two boxes are equal if they contain the same points. | |
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. | |
bool | operator!= (LonLat const &p) const |
NormalizedAngleInterval const & | getLon () const |
getLon returns the longitude interval of this box. | |
AngleInterval const & | getLat () const |
getLat returns the latitude interval of this box. | |
bool | isEmpty () const |
isEmpty returns true if this box does not contain any points. | |
bool | isFull () const |
LonLat | getCenter () const |
NormalizedAngle | getWidth () const |
Angle | getHeight () const |
Box & | clipTo (LonLat const &x) |
Box & | clipTo (Box const &x) |
Box | clippedTo (LonLat const &x) const |
clippedTo returns the intersection of this box and x. | |
Box | clippedTo (Box const &x) const |
Box & | dilateBy (Angle r) |
Box | dilatedBy (Angle r) const |
Box & | dilateBy (Angle w, Angle h) |
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. | |
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 |
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 |
bool | contains (double lon, double lat) const |
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 |
![]() | |
virtual std::unique_ptr< Region > | clone () const =0 |
clone returns a deep copy of this region. More... | |
virtual Box | getBoundingBox () const =0 |
getBoundingBox returns a bounding-box for this region. More... | |
virtual Box3d | getBoundingBox3d () const =0 |
getBoundingBox3d returns a 3-dimensional bounding-box for this region. More... | |
virtual Circle | getBoundingCircle () const =0 |
getBoundingCircle returns a bounding-circle for this region. 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 |
bool | contains (double lon, double lat) const |
virtual std::vector< uint8_t > | encode () const =0 |
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) |
static NormalizedAngleInterval | allLongitudes () |
static AngleInterval | allLatitudes () |
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 std::unique_ptr< Region > | decode (std::vector< uint8_t > const &s) |
static std::unique_ptr< Region > | 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:
This constructor creates a box spanning the longitude interval [p1.getLon(), p2.getLon()] and latitude interval [p1.getLat(), p2.getLat()].
This constructor creates a box with center p, half-width (in longitude angle) w and half-height (in latitude angle) h.
|
inline |
This constructor creates a box spanning the given longitude and latitude intervals.
|
inlinestatic |
allLatitudes
returns an angle interval containing all valid latitude angles.
|
inlinestatic |
allLongitudes
returns a normalized angle interval containing all valid longitude angles.
clippedTo
returns the smallest box containing the intersection of this box and x. The result is not always unique, and x.clippedTo(y)
is not guaranteed to equal y.clippedTo(x)
.
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)
.
clipTo
shrinks this box until it contains only x. If this box does not contain x, it is emptied.
|
inlineoverridevirtual |
clone
returns a deep copy of this region.
Implements lsst::sphgeom::Region.
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 |
contains
tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region.
|
inline |
contains
returns true if the intersection of this box and x is equal to x.
|
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 |
decode
deserializes a Box from a byte string produced by encode.
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.
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)
.
|
overridevirtual |
encode
serializes this region into an opaque byte string. Byte strings emitted by encode can be deserialized with decode.
Implements lsst::sphgeom::Region.
expandedTo
returns the smallest box containing the union of this box and x. The result is not always unique, and x.expandedTo(y)
is not guaranteed to equal y.expandedTo(x)
.
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)
.
|
inlineoverridevirtual |
getBoundingBox
returns a bounding-box for this region.
Implements lsst::sphgeom::Region.
|
overridevirtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implements lsst::sphgeom::Region.
|
overridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
|
inline |
getCenter
returns the center of this box. It is NaN for empty boxes and arbitrary for full boxes.
|
inline |
getHeight
returns the height in latitude angle of this box. It is negative or NaN for empty boxes.
|
inline |
getWidth
returns the width in longitude angle of this box. It is NaN for empty boxes.
|
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.
|
inline |
intersects
returns true if the intersection of this box and x is non-empty.
|
inline |
isDisjointFrom
returns true if the intersection of this box and x is empty.
|
inline |
isFull
returns true if this box contains all points on the unit sphere.
|
inline |
isWithin
returns true if the intersection of this box and x is this box.
|
inlineoverridevirtual |
Implements lsst::sphgeom::Region.
|
overridevirtual |
Implements lsst::sphgeom::Region.
|
overridevirtual |
Implements lsst::sphgeom::Region.
|
overridevirtual |
Implements lsst::sphgeom::Region.
|
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.