lsst.sphgeom
19.0.0-4-g8557e14+3
|
Go to the documentation of this file.
23 #ifndef LSST_SPHGEOM_CIRCLE_H_
24 #define LSST_SPHGEOM_CIRCLE_H_
48 static constexpr uint8_t TYPE_CODE =
'c';
52 static Circle full() {
return Circle(UnitVector3d::Z(), 4.0); }
67 _squaredChordLength(-1.0),
78 _squaredChordLength(0.0),
96 _squaredChordLength(cl2),
100 bool operator==(
Circle const & c)
const {
101 return (isEmpty() && c.isEmpty()) ||
102 (isFull() && c.isFull()) ||
103 (_center == c._center &&
104 _squaredChordLength == c._squaredChordLength &&
105 _openingAngle == c._openingAngle);
107 bool operator!=(
Circle const & c)
const {
return !(*
this == c); }
109 bool isEmpty()
const {
111 return !(_squaredChordLength >= 0.0);
114 bool isFull()
const {
return _squaredChordLength >= 4.0; }
166 return Circle(*this).clipTo(x);
170 return Circle(*this).clipTo(x);
184 return Circle(*this).expandTo(x);
188 return Circle(*this).expandTo(x);
200 Circle dilatedBy(Angle r)
const {
return Circle(*this).dilateBy(r); }
202 Circle erodedBy(Angle r)
const {
return dilatedBy(-r); }
206 return PI * std::max(0.0, std::min(_squaredChordLength, 4.0));
222 std::unique_ptr<Region>
clone()
const override {
223 return std::unique_ptr<Circle>(
new Circle(*
this));
232 (v - _center).getSquaredNorm() <= _squaredChordLength;
245 std::vector<uint8_t>
encode()
const override;
249 static std::unique_ptr<Circle>
decode(std::vector<uint8_t>
const & s) {
250 return decode(s.data(), s.size());
252 static std::unique_ptr<Circle>
decode(uint8_t
const * buffer,
size_t n);
256 static constexpr
size_t ENCODED_SIZE = 41;
259 double _squaredChordLength;
263 std::ostream & operator<<(std::ostream &, Circle
const &);
267 #endif // LSST_SPHGEOM_CIRCLE_H_
Circle(UnitVector3d const &c, double cl2)
Definition: Circle.h:94
Circle()
This constructor creates an empty circle.
Definition: Circle.h:65
This file defines an interface for spherical regions.
bool intersects(UnitVector3d const &x) const
Definition: Circle.h:144
Circle & dilateBy(Angle r)
Definition: Circle.cc:184
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition: Circle.h:228
virtual Relationship relate(Region const &) const =0
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition: Circle.h:222
Circle & complement()
Definition: Circle.cc:194
static double squaredChordLengthFor(Angle openingAngle)
Definition: Circle.cc:41
Relationship invert(Relationship r)
Definition: Relationship.h:55
This file declares a class for representing unit vectors in ℝ³.
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition: Relationship.h:35
double getArea() const
getArea returns the area of this circle in steradians.
Definition: Circle.h:205
bool isWithin(UnitVector3d const &) const
Definition: Circle.h:151
Circle & clipTo(UnitVector3d const &x)
Definition: Circle.cc:88
bool isDisjointFrom(UnitVector3d const &x) const
Definition: Circle.h:137
Circle complemented() const
complemented returns the closure of the complement of this circle.
Definition: Circle.h:217
Circle(UnitVector3d const &c)
Definition: Circle.h:76
Relationship relate(Region const &r) const override
Definition: Circle.h:235
Definition: UnitVector3d.h:55
Circle & expandTo(UnitVector3d const &x)
Definition: Circle.cc:120
Angle getOpeningAngle() const
Definition: Circle.h:128
Definition: ConvexPolygon.h:57
Circle expandedTo(UnitVector3d const &x) const
Definition: Circle.h:183
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition: Circle.cc:211
Definition: Ellipse.h:169
double getSquaredChordLength() const
Definition: Circle.h:123
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition: Circle.cc:219
Circle(UnitVector3d const &c, Angle a)
Definition: Circle.h:85
Circle clippedTo(UnitVector3d const &x) const
Definition: Circle.h:165
std::vector< uint8_t > encode() const override
Definition: Circle.cc:324
bool contains(Circle const &x) const
Definition: Circle.cc:64
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
Definition: Circle.h:249
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition: Circle.h:230
UnitVector3d const & getCenter() const
Definition: Circle.h:118
static Angle openingAngleFor(double squaredChordLength)
Definition: Circle.cc:52