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
|
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. More... | |
Circle (UnitVector3d const &c) | |
This constructor creates the circle with center c and squared chord length / opening angle of zero. More... | |
Circle (UnitVector3d const &c, Angle a) | |
This constructor creates a circle with center c and opening angle a. More... | |
Circle (UnitVector3d const &c, double cl2) | |
This constructor creates a circle with center c and squared chord length cl2. More... | |
bool | operator== (Circle const &c) const |
bool | operator!= (Circle const &c) const |
bool | isEmpty () const |
bool | isFull () const |
UnitVector3d const & | getCenter () const |
getCenter returns the center of this circle as a unit vector. More... | |
double | getSquaredChordLength () const |
getSquaredChordLength returns the squared length of chords between the circle center and points on the circle boundary. More... | |
Angle | getOpeningAngle () const |
getOpeningAngle returns the opening angle of this circle - that is, the angle between its center vector and points on its boundary. More... | |
bool | contains (Circle const &x) const |
contains returns true if the intersection of this circle and x is equal to x. More... | |
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. More... | |
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. More... | |
Circle & | complement () |
complement sets this circle to the closure of its complement. More... | |
Circle | complemented () const |
complemented returns the closure of the complement of this circle. More... | |
Relationship | relate (UnitVector3d const &v) const |
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 &) 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 | 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. More... | |
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. More... | |
static std::unique_ptr< Circle > | decode (std::vector< uint8_t > const &s) |
static std::unique_ptr< Circle > | decode (uint8_t const *buffer, size_t n) |
Static Public Attributes | |
static constexpr uint8_t | TYPE_CODE = 'c' |
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 76 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 85 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 94 of file Circle.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 96 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 91 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 197 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.
|
inlinestatic |
decode
deserializes a Circle from a byte string produced by encode.
Definition at line 251 of file Circle.h.
|
static |
decode
deserializes a Circle from a byte string produced by encode.
Definition at line 345 of file Circle.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 187 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 332 of file Circle.cc.
Definition at line 201 of file Circle.h.
|
inline |
expandTo
minimally expands this circle to contain x.
Definition at line 147 of file Circle.cc.
Circle & lsst::sphgeom::Circle::expandTo | ( | UnitVector3d const & | x | ) |
expandTo
minimally expands this circle to contain x.
Definition at line 123 of file Circle.cc.
|
inline |
|
overridevirtual |
getBoundingBox
returns a bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 214 of file Circle.cc.
|
overridevirtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 222 of file Circle.cc.
|
inlineoverridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
Definition at line 228 of file Circle.h.
|
inline |
|
inline |
|
inline |
|
inline |
intersects
returns true if the intersection of this circle and x is non-empty.
Definition at line 145 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 |
|
inline |
|
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 52 of file Circle.cc.
|
inline |
|
inline |
|
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 280 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 285 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 322 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 327 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 |