lsst.sphgeom gb956055f9b+164b02c8d4
|
#include <Circle.h>
Public Member Functions | |
Circle () | |
This constructor creates an empty circle. | |
Circle (UnitVector3d const &c) | |
Circle (UnitVector3d const &c, Angle a) | |
Circle (UnitVector3d const &c, double cl2) | |
bool | operator== (Circle const &c) const |
bool | operator!= (Circle const &c) const |
bool | isEmpty () const |
bool | isFull () const |
UnitVector3d const & | getCenter () const |
double | getSquaredChordLength () const |
Angle | getOpeningAngle () const |
bool | contains (Circle const &x) const |
Circle & | dilateBy (Angle r) |
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 () |
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. 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 |
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 | 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 |
![]() | |
bool | contains (double x, double y, double z) const |
bool | contains (double lon, double lat) const |
Static Public Member Functions | |
static Circle | empty () |
static Circle | full () |
static double | squaredChordLengthFor (Angle openingAngle) |
static Angle | openingAngleFor (double squaredChordLength) |
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 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 = '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.
|
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.
|
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.
|
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.
|
inline |
clippedTo
returns the minimal bounding circle for the intersection of this circle and x.
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.
|
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.
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 |
contains
tests whether the unit vector defined by the given (not necessarily normalized) coordinates is inside this region.
|
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.
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.
|
overridevirtual |
encode
serializes this region into an opaque byte string. Byte strings emitted by encode can be deserialized with decode.
Implements lsst::sphgeom::Region.
|
inline |
expandedTo
returns the minimal bounding circle for the union of this circle and x.
Circle & lsst::sphgeom::Circle::expandTo | ( | UnitVector3d const & | x | ) |
expandTo
minimally expands this circle to contain x.
|
overridevirtual |
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.
|
inlineoverridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
|
inline |
getCenter
returns the center of this circle as a unit vector. It is arbitrary for empty and full circles.
|
inline |
getOpeningAngle
returns the opening angle of this circle - that is, the angle between its center vector and points on its boundary. It is negative or NaN for empty circles, and at least PI for full circles.
|
inline |
getSquaredChordLength
returns the squared length of chords between the circle center and points on the circle boundary. It is negative or NaN for empty circles, and at least 4 for full circles.
|
inline |
intersects
returns true if the intersection of this circle and x is non-empty.
|
inline |
isDisjointFrom
returns true if the intersection of this circle and x is empty.
|
inline |
isWithin
returns true if the intersection of this circle and x is this circle.
|
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).
|
overridevirtual |
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.
|
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).