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