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_ Circle(UnitVector3d const &c, Angle a)
Definition: Circle.h:85
Circle & expandTo(UnitVector3d const &x)
Definition: Circle.cc:120
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
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
double getArea() const
getArea returns the area of this circle in steradians.
Definition: Circle.h:205
bool contains(Circle const &x) const
Definition: Circle.cc:64
Circle & clipTo(UnitVector3d const &x)
Definition: Circle.cc:88
Angle getOpeningAngle() const
Definition: Circle.h:128
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
This file declares a class for representing unit vectors in ℝ³.
Definition: Ellipse.h:169
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition: Circle.h:222
Relationship invert(Relationship r)
Definition: Relationship.h:55
Circle(UnitVector3d const &c, double cl2)
Definition: Circle.h:94
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition: Circle.h:228
This file defines an interface for spherical regions.
std::vector< uint8_t > encode() const override
Definition: Circle.cc:324
Circle & complement()
Definition: Circle.cc:194
Circle clippedTo(UnitVector3d const &x) const
Definition: Circle.h:165
bool isWithin(UnitVector3d const &) const
Definition: Circle.h:151
virtual Relationship relate(Region const &) const =0
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition: Circle.cc:211
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
Definition: Circle.h:249
Definition: ConvexPolygon.h:57
Circle & dilateBy(Angle r)
Definition: Circle.cc:184
Circle expandedTo(UnitVector3d const &x) const
Definition: Circle.h:183
static Angle openingAngleFor(double squaredChordLength)
Definition: Circle.cc:52
UnitVector3d const & getCenter() const
Definition: Circle.h:118
Circle(UnitVector3d const &c)
Definition: Circle.h:76
Circle()
This constructor creates an empty circle.
Definition: Circle.h:65
Definition: UnitVector3d.h:55
Relationship relate(Region const &r) const override
Definition: Circle.h:235
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition: Relationship.h:35
bool isDisjointFrom(UnitVector3d const &x) const
Definition: Circle.h:137