30#ifndef LSST_SPHGEOM_CIRCLE_H_
31#define LSST_SPHGEOM_CIRCLE_H_
55 static constexpr uint8_t TYPE_CODE =
'c';
59 static Circle full() {
return Circle(UnitVector3d::Z(), 4.0); }
74 _squaredChordLength(-1.0),
85 _squaredChordLength(0.0),
103 _squaredChordLength(cl2),
107 bool operator==(
Circle const & c)
const {
108 return (isEmpty() && c.isEmpty()) ||
109 (isFull() && c.isFull()) ||
110 (_center == c._center &&
111 _squaredChordLength == c._squaredChordLength &&
112 _openingAngle == c._openingAngle);
114 bool operator!=(Circle
const & c)
const {
return !(*
this == c); }
116 bool isEmpty()
const {
118 return !(_squaredChordLength >= 0.0);
121 bool isFull()
const {
return _squaredChordLength >= 4.0; }
165 Circle &
clipTo(UnitVector3d
const & x);
166 Circle &
clipTo(Circle
const & x);
183 Circle &
expandTo(UnitVector3d
const & x);
184 Circle &
expandTo(Circle
const & x);
207 Circle dilatedBy(Angle r)
const {
return Circle(*this).dilateBy(r); }
208 Circle & erodeBy(Angle r) {
return dilateBy(-r); }
209 Circle erodedBy(Angle r)
const {
return dilatedBy(-r); }
213 return PI * std::max(0.0, std::min(_squaredChordLength, 4.0));
229 std::unique_ptr<Region>
clone()
const override {
230 return std::unique_ptr<Circle>(
new Circle(*
this));
239 (v - _center).getSquaredNorm() <= _squaredChordLength;
254 std::vector<uint8_t>
encode()
const override;
258 static std::unique_ptr<Circle>
decode(std::vector<uint8_t>
const & s) {
259 return decode(s.data(), s.size());
261 static std::unique_ptr<Circle>
decode(uint8_t
const * buffer,
size_t n);
265 static constexpr size_t ENCODED_SIZE = 41;
268 double _squaredChordLength;
272std::ostream & operator<<(std::ostream &, Circle
const &);
This file defines an interface for spherical regions.
This file declares a class for representing unit vectors in ℝ³.
bool contains(Circle const &x) const
Definition Circle.cc:71
static Angle openingAngleFor(double squaredChordLength)
Definition Circle.cc:59
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition Circle.cc:221
Circle clippedTo(UnitVector3d const &x) const
Definition Circle.h:172
Circle & clipTo(UnitVector3d const &x)
Definition Circle.cc:98
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition Circle.h:229
double getArea() const
getArea returns the area of this circle in steradians.
Definition Circle.h:212
Circle & dilateBy(Angle r)
Definition Circle.cc:194
bool isWithin(UnitVector3d const &) const
Definition Circle.h:158
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
Definition Circle.h:258
Circle expandedTo(UnitVector3d const &x) const
Definition Circle.h:190
Circle(UnitVector3d const &c, Angle a)
Definition Circle.h:92
std::vector< uint8_t > encode() const override
Definition Circle.cc:339
bool isDisjointFrom(UnitVector3d const &x) const
Definition Circle.h:144
Circle(UnitVector3d const &c, double cl2)
Definition Circle.h:101
Circle(UnitVector3d const &c)
Definition Circle.h:83
double getSquaredChordLength() const
Definition Circle.h:130
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition Circle.h:237
Angle getOpeningAngle() const
Definition Circle.h:135
UnitVector3d const & getCenter() const
Definition Circle.h:125
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition Circle.cc:229
bool intersects(UnitVector3d const &x) const
Definition Circle.h:151
Circle & complement()
Definition Circle.cc:204
Circle & expandTo(UnitVector3d const &x)
Definition Circle.cc:130
Circle()
This constructor creates an empty circle.
Definition Circle.h:72
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition Circle.h:235
static double squaredChordLengthFor(Angle openingAngle)
Definition Circle.cc:48
Circle complemented() const
complemented returns the closure of the complement of this circle.
Definition Circle.h:224
Relationship relate(Region const &r) const override
Definition Circle.h:244
Definition ConvexPolygon.h:64
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:62
Relationship invert(Relationship r)
Definition Relationship.h:62
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42