LSSTApplications
20.0.0
LSSTDataManagementBasePackage
|
Go to the documentation of this file.
42 if (
a.asRadians() < 0.0) {
45 if (
a.asRadians() >=
PI) {
48 double s =
sin(0.5 *
a);
55 if (squaredChordLength < 0.0) {
58 if (squaredChordLength >= 4.0) {
72 return _openingAngle >
84 return cc > _openingAngle +
x._openingAngle +
132 Angle o = 0.5 * (cx + _openingAngle);
133 Angle r = 0.5 * (cx - _openingAngle);
163 Angle o = 0.5 * (cc + _openingAngle +
x._openingAngle);
174 Angle r = o - _openingAngle;
187 Angle o = _openingAngle + r;
197 _squaredChordLength = 4.0;
201 _squaredChordLength = -1.0;
202 _openingAngle =
Angle(-1.0);
205 _squaredChordLength = 4.0 - _squaredChordLength;
206 _openingAngle =
Angle(
PI) - _openingAngle;
220 static double const MAX_BOUNDARY_ERROR = 6.2e-16;
245 double s =
sin(_openingAngle);
246 double c =
cos(_openingAngle);
247 for (
int i = 0; i < 3; ++i) {
248 double ci = _center(i);
250 double bmin = 1.0, bmax = -1.0;
251 if (2.0 - 2.0 * ci <= _squaredChordLength) {
254 if (2.0 + 2.0 * ci <= _squaredChordLength) {
257 double b0 = ci * c + di * s;
258 bmax =
std::max(bmax, b0 + MAX_BOUNDARY_ERROR);
259 bmin =
std::min(bmin, b0 - MAX_BOUNDARY_ERROR);
260 double b1 = ci * c - di * s;
261 bmax =
std::max(bmax, b1 + MAX_BOUNDARY_ERROR);
262 bmin =
std::min(bmin, b1 - MAX_BOUNDARY_ERROR);
265 return Box3d(e[0], e[1], e[2]);
272 return DISJOINT | WITHIN;
279 return invert(
b.relate(*
this));
285 return CONTAINS | DISJOINT | WITHIN;
287 return DISJOINT | WITHIN;
289 return CONTAINS | DISJOINT;
294 return CONTAINS | WITHIN;
338 if (buffer ==
nullptr ||
n != ENCODED_SIZE || *buffer !=
TYPE_CODE) {
346 double squaredChordLength =
decodeDouble(buffer); buffer += 8;
347 double openingAngle =
decodeDouble(buffer); buffer += 8;
349 circle->_squaredChordLength = squaredChordLength;
350 circle->_openingAngle =
Angle(openingAngle);
357 return os <<
"{\"Circle\": [" << c.
getCenter() << tail;
Circle()
This constructor creates an empty circle.
Circle & dilateBy(Angle r)
If r is positive, dilateBy increases the opening angle of this circle to include all points within an...
This file declares a class for representing axis-aligned bounding boxes in ℝ³.
double sin(Angle const &a)
Circle & complement()
complement sets this circle to the closure of its complement.
static double squaredChordLengthFor(Angle openingAngle)
squaredChordLengthFor computes and returns the squared chord length between points in S² that are sep...
double asRadians() const
asRadians returns the value of this angle in units of radians.
static constexpr uint8_t TYPE_CODE
LonLat represents a spherical coordinate (longitude/latitude angle) pair.
Relationship relate(UnitVector3d const &v) const
Box represents a rectangle in spherical coordinate space that contains its boundary.
Circle & clipTo(UnitVector3d const &x)
bool isDisjointFrom(UnitVector3d const &x) const
This file contains simple helper functions for encoding and decoding primitive types to/from byte str...
Interval1d represents closed intervals of ℝ.
This file declares a class for representing circular regions on the unit sphere.
Box3d represents a box in ℝ³.
UnitVector3d is a unit vector in ℝ³ with components stored in double precision.
Circle & expandTo(UnitVector3d const &x)
ConvexPolygon is a closed convex polygon on the unit sphere.
static NormalizedAngle halfWidthForCircle(Angle r, Angle lat)
halfWidthForCircle computes the half-width of bounding boxes for circles with radius r and centers at...
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Ellipse is an elliptical region on the sphere.
double getSquaredChordLength() const
getSquaredChordLength returns the squared length of chords between the circle center and points on th...
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
A base class for image defects.
Relationship relate(Region const &r) const override
double decodeDouble(uint8_t const *buffer)
decode extracts an IEEE double from the 8 byte little-endian byte sequence in buffer.
std::vector< uint8_t > encode() const override
encode serializes this region into an opaque byte string.
This file declares a class for representing elliptical regions on the unit sphere.
bool contains(Circle const &x) const
contains returns true if the intersection of this circle and x is equal to x.
static Box3d aroundUnitSphere()
aroundUnitSphere returns a minimal Box3d containing the unit sphere.
static std::unique_ptr< Circle > decode(std::vector< uint8_t > const &s)
This file declares a class for representing longitude/latitude angle boxes on the unit sphere.
Angle represents an angle in radians.
static UnitVector3d orthogonalTo(Vector3d const &v)
orthogonalTo returns an arbitrary unit vector that is orthogonal to v.
Relationship relate(Region const &r) const override
std::ostream & operator<<(std::ostream &, Angle const &)
UnitVector3d const & getCenter() const
getCenter returns the center of this circle as a unit vector.
Circle is a circular region on the unit sphere that contains its boundary.
NormalizedAngle is an angle that lies in the range [0, 2π), with one exception - a NormalizedAngle ca...
constexpr double MAX_ASIN_ERROR
static Angle openingAngleFor(double squaredChordLength)
openingAngleFor computes and returns the angular separation between points in S² that are separated b...
static UnitVector3d fromNormalized(Vector3d const &v)
fromNormalized returns the unit vector equal to v, which is assumed to be normalized.
double cos(Angle const &a)
Relationship invert(Relationship r)
Given the relationship between two sets A and B (i.e.
This file declares a class for representing convex polygons with great circle edges on the unit spher...
void encodeDouble(double item, std::vector< uint8_t > &buffer)
encode appends an IEEE double in little-endian byte order to the end of buffer.