LSST Applications g063fba187b+cac8b7c890,g0f08755f38+6aee506743,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a2382251a+b4475c5878,g1dcb35cd9c+8f9bc1652e,g20f6ffc8e0+6aee506743,g217e2c1bcf+73dee94bd0,g28da252d5a+1f19c529b9,g2bbee38e9b+3f2625acfc,g2bc492864f+3f2625acfc,g3156d2b45e+6e55a43351,g32e5bea42b+1bb94961c2,g347aa1857d+3f2625acfc,g35bb328faa+a8ce1bb630,g3a166c0a6a+3f2625acfc,g3e281a1b8c+c5dd892a6c,g3e8969e208+a8ce1bb630,g414038480c+5927e1bc1e,g41af890bb2+8a9e676b2a,g7af13505b9+809c143d88,g80478fca09+6ef8b1810f,g82479be7b0+f568feb641,g858d7b2824+6aee506743,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,ga5288a1d22+2903d499ea,gb58c049af0+d64f4d3760,gc28159a63d+3f2625acfc,gcab2d0539d+b12535109e,gcf0d15dbbd+46a3f46ba9,gda6a2b7d83+46a3f46ba9,gdaeeff99f8+1711a396fd,ge79ae78c31+3f2625acfc,gef2f8181fd+0a71e47438,gf0baf85859+c1f95f4921,gfa517265be+6aee506743,gfa999e8aa5+17cd334064,w.2024.51
LSST Data Management Base Package
|
Circle
is a circular region on the unit sphere that contains its boundary.
More...
#include <Circle.h>
Public Member Functions | |
Circle () | |
This constructor creates an empty circle. | |
Circle (UnitVector3d const &c) | |
This constructor creates the circle with center c and squared chord length / opening angle of zero. | |
Circle (UnitVector3d const &c, Angle a) | |
This constructor creates a circle with center c and opening angle a. | |
Circle (UnitVector3d const &c, double cl2) | |
This constructor creates a circle with center c and squared chord length cl2. | |
bool | operator== (Circle const &c) const |
bool | operator!= (Circle const &c) const |
bool | isEmpty () const override |
isEmpty returns true when a region does not contain any points. | |
bool | isFull () const |
UnitVector3d const & | getCenter () const |
getCenter returns the center of this circle as a unit vector. | |
double | getSquaredChordLength () const |
getSquaredChordLength returns the squared length of chords between the circle center and points on the circle boundary. | |
Angle | getOpeningAngle () const |
getOpeningAngle returns the opening angle of this circle - that is, the angle between its center vector and points on its boundary. | |
bool | contains (Circle const &x) const |
contains returns true if the intersection of this circle and x is equal to x. | |
Circle & | dilateBy (Angle r) |
If r is positive, dilateBy increases the opening angle of this circle to include all points within angle r of its boundary. | |
Circle | dilatedBy (Angle r) const |
Circle & | erodeBy (Angle r) |
Circle | erodedBy (Angle r) const |
double | getArea () const |
getArea returns the area of this circle in steradians. | |
Circle & | complement () |
complement sets this circle to the closure of its complement. | |
Circle | complemented () const |
complemented returns the closure of the complement of this circle. | |
Relationship | relate (UnitVector3d const &v) const |
std::unique_ptr< Region > | clone () const override |
clone returns a deep copy of this region. | |
Box | getBoundingBox () const override |
getBoundingBox returns a bounding-box for this region. | |
Box3d | getBoundingBox3d () const override |
getBoundingBox3d returns a 3-dimensional bounding-box for this region. | |
Circle | getBoundingCircle () const override |
getBoundingCircle returns a bounding-circle for this region. | |
bool | contains (UnitVector3d const &v) const override |
contains tests whether the given unit vector is inside this region. | |
Relationship | relate (Region const &r) const override |
Relationship | relate (Box const &) const override |
Relationship | relate (Circle const &) const override |
Relationship | relate (ConvexPolygon const &) const override |
Relationship | relate (Ellipse const &) const override |
TriState | overlaps (Region const &other) const override |
TriState | overlaps (Box const &) const override |
TriState | overlaps (Circle const &) const override |
TriState | overlaps (ConvexPolygon const &) const override |
TriState | overlaps (Ellipse const &) const override |
std::vector< std::uint8_t > | encode () const override |
encode serializes this region into an opaque byte string. | |
virtual bool | contains (UnitVector3d const &) const=0 |
contains tests whether the given unit vector is inside this region. | |
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. | |
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. | |
bool | isDisjointFrom (UnitVector3d const &x) const |
bool | isDisjointFrom (Circle const &x) const |
bool | intersects (UnitVector3d const &x) const |
bool | intersects (Circle const &x) const |
bool | isWithin (UnitVector3d const &) const |
bool | isWithin (Circle const &x) const |
Circle & | clipTo (UnitVector3d const &x) |
Circle & | clipTo (Circle const &x) |
Circle | clippedTo (UnitVector3d const &x) const |
Circle | clippedTo (Circle const &x) const |
Circle & | expandTo (UnitVector3d const &x) |
Circle & | expandTo (Circle const &x) |
Circle | expandedTo (UnitVector3d const &x) const |
Circle | expandedTo (Circle const &x) const |
Static Public Member Functions | |
static Circle | empty () |
static Circle | full () |
static double | squaredChordLengthFor (Angle openingAngle) |
squaredChordLengthFor computes and returns the squared chord length between points in S² that are separated by the given angle. | |
static Angle | openingAngleFor (double squaredChordLength) |
openingAngleFor computes and returns the angular separation between points in S² that are separated by the given squared chord length. | |
static std::vector< std::unique_ptr< Region > > | getRegions (Region const ®ion) |
getRegions returns a vector of Region. | |
static std::unique_ptr< Circle > | decode (std::vector< std::uint8_t > const &s) |
static std::unique_ptr< Circle > | decode (std::uint8_t const *buffer, size_t n) |
static std::unique_ptr< Region > | decodeBase64 (std::string const &s) |
static std::unique_ptr< Region > | decodeBase64 (std::string_view const &s) |
static TriState | decodeOverlapsBase64 (std::string const &s) |
static TriState | decodeOverlapsBase64 (std::string_view const &s) |
Static Public Attributes | |
static constexpr std::uint8_t | TYPE_CODE = 'c' |
Static Protected Member Functions | |
static TriState | _relationship_to_overlaps (Relationship r) |
Circle
is a circular region on the unit sphere that contains its boundary.
Internally, the circle is represented by its center vector and the squared length of the chords between its center and points on its boundary. This yields a fast point-in-circle test but, unlike a representation that uses the center vector and cosine of the circle opening angle, remains accurate for circles with very small opening angles.
|
inline |
This constructor creates an empty circle.
|
inlineexplicit |
This constructor creates the circle with center c and squared chord length / opening angle of zero.
Because of rounding error, (v - c).squaredNorm() == 0.0 does not imply that v == c. Therefore calling contains(v) on the resulting circle may return true for unit vectors v != c.
Definition at line 84 of file Circle.h.
|
inline |
This constructor creates a circle with center c and opening angle a.
If a is negative or NaN, the circle will be empty, and if a is greater than or equal to PI, the circle will be full.
Definition at line 93 of file Circle.h.
|
inline |
This constructor creates a circle with center c and squared chord length cl2.
If cl2 is negative or NaN, the circle will be empty, and if cl2 is greater than or equal to 4, the circle will be full.
Definition at line 102 of file Circle.h.
|
inlinestaticprotectedinherited |
Definition at line 206 of file Region.h.
clippedTo
returns the minimal bounding circle for the intersection of this circle and x.
|
inline |
clipTo
sets this circle to the minimal bounding circle for the intersection of this circle and x.
Definition at line 103 of file Circle.cc.
Circle & lsst::sphgeom::Circle::clipTo | ( | UnitVector3d const & | x | ) |
clipTo
sets this circle to the minimal bounding circle for the intersection of this circle and x.
Definition at line 98 of file Circle.cc.
|
inlineoverridevirtual |
clone
returns a deep copy of this region.
Implements lsst::sphgeom::Region.
Circle & lsst::sphgeom::Circle::complement | ( | ) |
complement
sets this circle to the closure of its complement.
Note that both the empty circle as well as all circles containing a single point are mapped to a full circle, so that taking the complement of a circle twice is not guaranteed to reproduce the original circle, even in the absence of rounding error.
Definition at line 204 of file Circle.cc.
|
inline |
bool lsst::sphgeom::Circle::contains | ( | Circle const & | x | ) | const |
contains
returns true if the intersection of this circle 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 |
|
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.
|
static |
decode
deserializes a Circle from a byte string produced by encode.
Definition at line 371 of file Circle.cc.
|
inlinestatic |
decode
deserializes a Circle from a byte string produced by encode.
Definition at line 267 of file Circle.h.
|
inlinestaticinherited |
decodeBase64
deserializes a Region from an ASCII string produced by encode and then base64-encoding that result.
This method also interprets ':' as a delimiter for the elements of a UnionRegion, to support cases where a union of region is constructed server-side in a database as a concatenation with that delimiter.
Definition at line 176 of file Region.h.
|
staticinherited |
decodeBase64
deserializes a Region from an ASCII string produced by encode and then base64-encoding that result.
This method also interprets ':' as a delimiter for the elements of a UnionRegion, to support cases where a union of region is constructed server-side in a database as a concatenation with that delimiter.
Definition at line 93 of file Region.cc.
|
inlinestaticinherited |
decodeOverlapsBase64
evaluates an encoded overlap expression.
A single overlap expression is formed by concatenating a pair of base64-encoded regions (Region::encode
then base64 encoding) with '&' as the delimiter. Multiple such pairwise overlap expressions can then be concatenated with '|' as the delimiter to form the logical OR.
|
staticinherited |
decodeOverlapsBase64
evaluates an encoded overlap expression.
A single overlap expression is formed by concatenating a pair of base64-encoded regions (Region::encode
then base64 encoding) with '&' as the delimiter. Multiple such pairwise overlap expressions can then be concatenated with '|' as the delimiter to form the logical OR.
Definition at line 117 of file Region.cc.
If r is positive, dilateBy
increases the opening angle of this circle to include all points within angle r of its boundary.
If r is negative, it decreases the opening angle to exclude those points instead.
If this circle is empty or full, or r is zero or NaN, there is no effect.
Definition at line 194 of file Circle.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 358 of file Circle.cc.
Definition at line 209 of file Circle.h.
|
inline |
expandTo
minimally expands this circle to contain x.
Definition at line 154 of file Circle.cc.
Circle & lsst::sphgeom::Circle::expandTo | ( | UnitVector3d const & | x | ) |
expandTo
minimally expands this circle to contain x.
Definition at line 130 of file Circle.cc.
|
inline |
|
overridevirtual |
getBoundingBox
returns a bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 221 of file Circle.cc.
|
overridevirtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 229 of file Circle.cc.
|
inlineoverridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
Definition at line 236 of file Circle.h.
|
inline |
|
inline |
|
staticinherited |
getRegions
returns a vector of Region.
Definition at line 145 of file Region.cc.
|
inline |
|
inline |
intersects
returns true if the intersection of this circle and x is non-empty.
Definition at line 153 of file Circle.h.
|
inline |
bool lsst::sphgeom::Circle::isDisjointFrom | ( | Circle const & | x | ) | const |
isDisjointFrom
returns true if the intersection of this circle and x is empty.
|
inline |
|
inlineoverridevirtual |
isEmpty
returns true when a region does not contain any points.
Implements lsst::sphgeom::Region.
Definition at line 117 of file Circle.h.
|
inline |
|
inline |
|
inline |
|
static |
openingAngleFor
computes and returns the angular separation between points in S² that are separated by the given squared chord length.
The squared chord length l² and angle θ are related by l² = 4 sin²(θ/2).
Definition at line 59 of file Circle.cc.
|
inline |
|
inline |
overlaps
tests whether two regions overlap. This method returns a TriState
object, when the value is true
it means that regions definitely overlap, false
means they are definitely disjont, and unknown state means that they may or may not overlap.
Implements lsst::sphgeom::Region.
overlaps
tests whether two regions overlap. This method returns a TriState
object, when the value is true
it means that regions definitely overlap, false
means they are definitely disjont, and unknown state means that they may or may not overlap.
Implements lsst::sphgeom::Region.
|
overridevirtual |
overlaps
tests whether two regions overlap. This method returns a TriState
object, when the value is true
it means that regions definitely overlap, false
means they are definitely disjont, and unknown state means that they may or may not overlap.
Implements lsst::sphgeom::Region.
Definition at line 348 of file Circle.cc.
overlaps
tests whether two regions overlap. This method returns a TriState
object, when the value is true
it means that regions definitely overlap, false
means they are definitely disjont, and unknown state means that they may or may not overlap.
Implements lsst::sphgeom::Region.
Definition at line 353 of file Circle.cc.
overlaps
tests whether two regions overlap. This method returns a TriState
object, when the value is true
it means that regions definitely overlap, false
means they are definitely disjont, and unknown state means that they may or may not overlap.
Implements lsst::sphgeom::Region.
Definition at line 255 of file Circle.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 287 of file Circle.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 292 of file Circle.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 329 of file Circle.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 334 of file Circle.cc.
|
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.
Relationship lsst::sphgeom::Circle::relate | ( | UnitVector3d const & | v | ) | const |
|
static |
squaredChordLengthFor
computes and returns the squared chord length between points in S² that are separated by the given angle.
The squared chord length l² and angle θ are related by l² = 4 sin²(θ/2).
|
staticconstexpr |