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),
87 _squaredChordLength(squaredChordLengthFor(a)),
96 _squaredChordLength(cl2),
97 _openingAngle(openingAngleFor(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);
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_ static Angle openingAngleFor(double squaredChordLength)
Definition: Circle.cc:52
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
static double squaredChordLengthFor(Angle openingAngle)
Definition: Circle.cc:41
bool intersects(UnitVector3d const &x) const
Definition: Circle.h:144
Relationship invert(Relationship r)
Definition: Relationship.h:55
Circle & dilateBy(Angle r)
Definition: Circle.cc:184
This file declares a class for representing unit vectors in ℝ³.
Definition: ConvexPolygon.h:57
Circle(UnitVector3d const &c, Angle a)
Definition: Circle.h:85
Circle & expandTo(UnitVector3d const &x)
Definition: Circle.cc:120
UnitVector3d const & getCenter() const
Definition: Circle.h:118
Relationship relate(Region const &r) const override
Definition: Circle.h:235
Circle(UnitVector3d const &c)
Definition: Circle.h:76
Circle & clipTo(UnitVector3d const &x)
Definition: Circle.cc:88
Circle()
This constructor creates an empty circle.
Definition: Circle.h:65
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition: Relationship.h:35
Circle complemented() const
complemented returns the closure of the complement of this circle.
Definition: Circle.h:217
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition: Circle.h:230
bool isDisjointFrom(UnitVector3d const &x) const
Definition: Circle.h:137
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition: Circle.cc:219
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition: Circle.h:222
bool contains(Circle const &x) const
Definition: Circle.cc:64
Circle & complement()
Definition: Circle.cc:194
This file defines an interface for spherical regions.
Circle(UnitVector3d const &c, double cl2)
Definition: Circle.h:94
Circle clippedTo(UnitVector3d const &x) const
Definition: Circle.h:165
virtual Relationship relate(Region const &) const =0
Definition: Ellipse.h:169
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition: Circle.h:228
Definition: UnitVector3d.h:55
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
Definition: Circle.h:249
double getSquaredChordLength() const
Definition: Circle.h:123
Circle expandedTo(UnitVector3d const &x) const
Definition: Circle.h:183
std::vector< uint8_t > encode() const override
Definition: Circle.cc:324
Angle getOpeningAngle() const
Definition: Circle.h:128
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition: Circle.cc:211