30#ifndef LSST_SPHGEOM_CIRCLE_H_
31#define LSST_SPHGEOM_CIRCLE_H_
56 static constexpr std::uint8_t TYPE_CODE =
'c';
60 static Circle full() {
return Circle(UnitVector3d::Z(), 4.0); }
75 _squaredChordLength(-1.0),
86 _squaredChordLength(0.0),
104 _squaredChordLength(cl2),
108 bool operator==(
Circle const & c)
const {
109 return (isEmpty() && c.isEmpty()) ||
110 (isFull() && c.isFull()) ||
111 (_center == c._center &&
112 _squaredChordLength == c._squaredChordLength &&
113 _openingAngle == c._openingAngle);
115 bool operator!=(
Circle const & c)
const {
return !(*
this == c); }
117 bool isEmpty()
const override {
119 return !(_squaredChordLength >= 0.0);
122 bool isFull()
const {
return _squaredChordLength >= 4.0; }
208 Circle dilatedBy(Angle r)
const {
return Circle(*this).dilateBy(r); }
210 Circle erodedBy(Angle r)
const {
return dilatedBy(-r); }
214 return PI * std::max(0.0, std::min(_squaredChordLength, 4.0));
230 std::unique_ptr<Region> clone()
const override {
231 return std::unique_ptr<Circle>(
new Circle(*
this));
234 Box getBoundingBox()
const override;
235 Box3d getBoundingBox3d()
const override;
236 Circle getBoundingCircle()
const override {
return *
this; }
238 bool contains(UnitVector3d
const & v)
const override {
240 (v - _center).getSquaredNorm() <= _squaredChordLength;
243 using Region::contains;
247 return invert(r.relate(*
this));
252 Relationship relate(ConvexPolygon
const &)
const override;
255 TriState overlaps(Region
const& other)
const override {
256 return other.overlaps(*
this);
258 TriState overlaps(Box
const &)
const override;
259 TriState overlaps(
Circle const &)
const override;
260 TriState overlaps(ConvexPolygon
const &)
const override;
261 TriState overlaps(Ellipse
const &)
const override;
263 std::vector<std::uint8_t> encode()
const override;
267 static std::unique_ptr<Circle>
decode(std::vector<std::uint8_t>
const & s) {
268 return decode(s.data(), s.size());
270 static std::unique_ptr<Circle>
decode(std::uint8_t
const * buffer,
size_t n);
274 std::string
toIvoaStcsBody(std::string
const & frame =
"")
const override;
276 static constexpr size_t ENCODED_SIZE = 41;
279 double _squaredChordLength;
283std::ostream & operator<<(std::ostream &, Circle
const &);
This file defines an interface for spherical regions.
This file declares a class for representing unit vectors in ℝ³.
Definition _continue_class.py:109
bool contains(Circle const &x) const
Definition Circle.cc:74
static Angle openingAngleFor(double squaredChordLength)
Definition Circle.cc:62
Circle clippedTo(UnitVector3d const &x) const
Definition Circle.h:173
Circle & clipTo(UnitVector3d const &x)
Definition Circle.cc:101
double getArea() const
getArea returns the area of this circle in steradians.
Definition Circle.h:213
Circle & dilateBy(Angle r)
Definition Circle.cc:197
bool isWithin(UnitVector3d const &) const
Definition Circle.h:159
Circle expandedTo(UnitVector3d const &x) const
Definition Circle.h:191
Circle(UnitVector3d const &c, Angle a)
Definition Circle.h:93
bool isDisjointFrom(UnitVector3d const &x) const
Definition Circle.h:145
Circle(UnitVector3d const &c, double cl2)
Definition Circle.h:102
Circle(UnitVector3d const &c)
Definition Circle.h:84
static std::unique_ptr< Circle > decode(std::vector< std::uint8_t > const &s)
Definition Circle.h:267
double getSquaredChordLength() const
Definition Circle.h:131
Angle getOpeningAngle() const
Definition Circle.h:136
UnitVector3d const & getCenter() const
Definition Circle.h:126
bool intersects(UnitVector3d const &x) const
Definition Circle.h:152
Circle & complement()
Definition Circle.cc:207
Circle & expandTo(UnitVector3d const &x)
Definition Circle.cc:133
Circle()
This constructor creates an empty circle.
Definition Circle.h:73
static double squaredChordLengthFor(Angle openingAngle)
Definition Circle.cc:51
Circle complemented() const
complemented returns the closure of the complement of this circle.
Definition Circle.h:225
Definition UnitVector3d.h:62
virtual std::string toIvoaStcsBody(std::string const &frame="") const
virtually.
Definition Region.h:258
Relationship invert(Relationship r)
Definition Relationship.h:62
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42