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
|
ConvexPolygon
is a closed convex polygon on the unit sphere.
More...
#include <ConvexPolygon.h>
Public Member Functions | |
ConvexPolygon (std::vector< UnitVector3d > const &points) | |
This constructor creates a convex polygon that is the convex hull of the given set of points. | |
ConvexPolygon (UnitVector3d const &v0, UnitVector3d const &v1, UnitVector3d const &v2) | |
This constructor creates a triangle with the given vertices. | |
ConvexPolygon (UnitVector3d const &v0, UnitVector3d const &v1, UnitVector3d const &v2, UnitVector3d const &v3) | |
This constructor creates a quadrilateral with the given vertices. | |
bool | operator== (ConvexPolygon const &p) const |
Two convex polygons are equal iff they contain the same points. | |
bool | operator!= (ConvexPolygon const &p) const |
std::vector< UnitVector3d > const & | getVertices () const |
UnitVector3d | getCentroid () const |
The centroid of a polygon is its center of mass projected onto S², assuming a uniform mass distribution over the polygon surface. | |
std::unique_ptr< Region > | clone () const override |
clone returns a deep copy of this region. | |
bool | isEmpty () const override |
isEmpty returns true when a region does not contain any points. | |
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. | |
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 | contains (UnitVector3d const &v) const override |
bool | contains (Region const &r) const |
bool | isDisjointFrom (Region const &r) const |
bool | intersects (Region const &r) const |
bool | isWithin (Region const &r) const |
Static Public Member Functions | |
static ConvexPolygon | convexHull (std::vector< UnitVector3d > const &points) |
convexHull returns the convex hull of the given set of points if it exists and throws an exception otherwise. | |
static std::vector< std::unique_ptr< Region > > | getRegions (Region const ®ion) |
getRegions returns a vector of Region. | |
static std::unique_ptr< ConvexPolygon > | decode (std::vector< std::uint8_t > const &s) |
static std::unique_ptr< ConvexPolygon > | 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 = 'p' |
Static Protected Member Functions | |
static TriState | _relationship_to_overlaps (Relationship r) |
ConvexPolygon
is a closed convex polygon on the unit sphere.
Its edges are great circles (geodesics), and the shorter of the two great circle segments between any two points on the polygon boundary is contained in the polygon.
The vertices of a convex polygon are distinct and have counter-clockwise orientation when viewed from outside the unit sphere. No three consecutive vertices are coplanar and edges do not intersect except at vertices.
Furthermore, if a convex polygon contains a point p of S², then we require that it be disjoint from point -p. This guarantees the existence of a unique shortest great circle segment between any 2 points contained in the polygon, but means e.g. that hemispheres and lunes cannot be represented by convex polygons.
Currently, the only way to construct a convex polygon is to compute the convex hull of a point set.
Definition at line 65 of file ConvexPolygon.h.
|
explicit |
This constructor creates a convex polygon that is the convex hull of the given set of points.
Definition at line 262 of file ConvexPolygon.cc.
|
inline |
This constructor creates a triangle with the given vertices.
It is assumed that orientation(v0, v1, v2) = 1. Use with caution - for performance reasons, this is not verified!
Definition at line 85 of file ConvexPolygon.h.
|
inline |
This constructor creates a quadrilateral with the given vertices.
It is assumed that orientation(v0, v1, v2), orientation(v1, v2, v3), orientation(v2, v3, v0), and orientation (v3, v0, v1) are all 1. Use with caution - for performance reasons, this is not verified!
Definition at line 96 of file ConvexPolygon.h.
|
inlinestaticprotectedinherited |
Definition at line 206 of file Region.h.
|
inlineoverridevirtual |
clone
returns a deep copy of this region.
Implements lsst::sphgeom::Region.
Definition at line 116 of file ConvexPolygon.h.
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.
Definition at line 117 of file Region.cc.
bool lsst::sphgeom::Region::contains | ( | double | x, |
double | y, | ||
double | z ) const |
bool lsst::sphgeom::ConvexPolygon::contains | ( | Region const & | r | ) | const |
contains
returns true if the intersection of this convex polygon and x is equal to x.
Definition at line 328 of file ConvexPolygon.cc.
|
virtual |
contains
tests whether the given unit vector is inside this region.
Implements lsst::sphgeom::Region.
|
overridevirtual |
contains
returns true if the intersection of this convex polygon and x is equal to x.
Implements lsst::sphgeom::Region.
Definition at line 324 of file ConvexPolygon.cc.
|
inlinestatic |
convexHull
returns the convex hull of the given set of points if it exists and throws an exception otherwise.
Though points are supplied in a vector, they really are conceptually a set - the ConvexPolygon returned is invariant under permutation of the input array.
Definition at line 73 of file ConvexPolygon.h.
|
static |
decode
deserializes a ConvexPolygon from a byte string produced by encode.
Definition at line 393 of file ConvexPolygon.cc.
|
inlinestatic |
decode
deserializes a ConvexPolygon from a byte string produced by encode.
Definition at line 175 of file ConvexPolygon.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.
|
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 380 of file ConvexPolygon.cc.
|
overridevirtual |
getBoundingBox
returns a bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 316 of file ConvexPolygon.cc.
|
overridevirtual |
getBoundingBox3d
returns a 3-dimensional bounding-box for this region.
Implements lsst::sphgeom::Region.
Definition at line 320 of file ConvexPolygon.cc.
|
overridevirtual |
getBoundingCircle
returns a bounding-circle for this region.
Implements lsst::sphgeom::Region.
Definition at line 312 of file ConvexPolygon.cc.
UnitVector3d lsst::sphgeom::ConvexPolygon::getCentroid | ( | ) | const |
The centroid of a polygon is its center of mass projected onto S², assuming a uniform mass distribution over the polygon surface.
Definition at line 308 of file ConvexPolygon.cc.
|
staticinherited |
getRegions
returns a vector of Region.
Definition at line 145 of file Region.cc.
|
inline |
Definition at line 107 of file ConvexPolygon.h.
bool lsst::sphgeom::ConvexPolygon::intersects | ( | Region const & | r | ) | const |
intersects
returns true if the intersection of this convex polygon and x is non-empty.
Definition at line 336 of file ConvexPolygon.cc.
bool lsst::sphgeom::ConvexPolygon::isDisjointFrom | ( | Region const & | r | ) | const |
isDisjointFrom
returns true if the intersection of this convex polygon and x is empty.
Definition at line 332 of file ConvexPolygon.cc.
|
overridevirtual |
isEmpty
returns true when a region does not contain any points.
Implements lsst::sphgeom::Region.
Definition at line 303 of file ConvexPolygon.cc.
bool lsst::sphgeom::ConvexPolygon::isWithin | ( | Region const & | r | ) | const |
isWithin
returns true if the intersection of this convex polygon and x is this convex polygon.
Definition at line 340 of file ConvexPolygon.cc.
|
inline |
Definition at line 105 of file ConvexPolygon.h.
bool lsst::sphgeom::ConvexPolygon::operator== | ( | ConvexPolygon const & | p | ) | const |
Two convex polygons are equal iff they contain the same points.
Definition at line 268 of file ConvexPolygon.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 360 of file ConvexPolygon.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 365 of file ConvexPolygon.cc.
|
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 370 of file ConvexPolygon.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 375 of file ConvexPolygon.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 163 of file ConvexPolygon.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 344 of file ConvexPolygon.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 348 of file ConvexPolygon.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 352 of file ConvexPolygon.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 356 of file ConvexPolygon.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.
Definition at line 153 of file ConvexPolygon.h.
|
staticconstexpr |
Definition at line 67 of file ConvexPolygon.h.