43 _a(alpha.asRadians() - 0.5 *
PI)
50 }
else if (f1 == -f2) {
70 b1.
x(), b1.
y(), b1.
z(),
71 f1.
x(), f1.
y(), f1.
z());
87 b1.
x(), b1.
y(), b1.
z(),
88 b2.
x(), b2.
y(), b2.
z());
94 }
else if (_a.
asRadians() > 0.0 && _b < _a) {
132 b1.
x(), b1.
y(), b1.
z(),
133 center.
x(), center.
y(), center.
z());
141 if ((alpha.
asRadians() < 0.5 *
PI && alpha < beta) ||
144 orientation = orientation +
Angle(0.5 *
PI);
150 b1.
x(), b1.
y(), b1.
z(),
151 center.
x(), center.
y(), center.
z());
162 double vdotc = v.
dot(c);
171 }
else if (vdotc < -0.5) {
179 double x = u.x() * _tana;
180 double y = u.y() * _tanb;
181 double z = u.z() + scz;
182 double d = (x * x + y *
y) - z * z;
184 return z >= 0.0 || d >= 0.0;
186 return z >= 0.0 && d <= 0.0;
344 for (
int r = 0; r < 3; ++r) {
345 for (
int c = 0; c < 3; ++c) {
358 if (buffer ==
nullptr || n != ENCODED_SIZE || buffer[0] !=
TYPE_CODE) {
372 ellipse->_S =
Matrix3d(m00, m01, m02,
378 ellipse->_a =
Angle(a);
379 ellipse->_b =
Angle(b);
380 ellipse->_gamma =
Angle(gamma);
383 ellipse->_tana = tana;
384 ellipse->_tanb = tanb;
double normalize()
normalize scales this vector to have unit norm and returns its norm prior to scaling.
This file declares a class for representing circular regions on the unit sphere.
static std::unique_ptr< Ellipse > decode(std::vector< uint8_t > const &s)
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
static UnitVector3d orthogonalTo(Vector3d const &v)
orthogonalTo returns an arbitrary unit vector that is orthogonal to v.
Ellipse()
This constructor creates an empty ellipse.
UnitVector3d getCenter() const
getCenter returns the center of the ellipse as a unit vector.
NormalizedAngle is an angle that lies in the range [0, 2π), with one exception - a NormalizedAngle ca...
bool isNan() const
isNan returns true if the angle value is NaN.
UnitVector3d rotatedAround(UnitVector3d const &k, Angle a) const
rotatedAround returns a copy of this unit vector, rotated around the unit vector k by angle a accordi...
This file contains simple helper functions for encoding and decoding primitive types to/from byte str...
std::ostream & operator<<(std::ostream &, Angle const &)
This file declares a class for representing axis-aligned bounding boxes in ℝ³.
static UnitVector3d northFrom(Vector3d const &v)
northFrom returns the unit vector orthogonal to v that points "north" from v.
constexpr double MAX_ASIN_ERROR
This file declares a class for representing elliptical regions on the unit sphere.
Vector3d is a vector in ℝ³ with components stored in double precision.
Box represents a rectangle in spherical coordinate space that contains its boundary.
A 3x3 matrix with real entries stored in double precision.
double cos(Angle const &a)
std::vector< uint8_t > encode() const override
encode serializes this region into an opaque byte string.
Matrix3d const & getTransformMatrix() const
getTransformMatrix returns the orthogonal matrix that maps vectors to the basis in which the quadrati...
Ellipse is an elliptical region on the sphere.
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this unit vector and v.
A base class for image defects.
double asRadians() const
asRadians returns the value of this angle in units of radians.
double tan(Angle const &a)
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
This file declares a class for representing longitude/latitude angle boxes on the unit sphere...
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Angle getBeta() const
getBeta returns β, the second semi-axis length of the ellipse.
Circle is a circular region on the unit sphere that contains its boundary.
ConvexPolygon is a closed convex polygon on the unit sphere.
Angle getAlpha() const
getAlpha returns α, the first semi-axis length of the ellipse.
double decodeDouble(uint8_t const *buffer)
decode extracts an IEEE double from the 8 byte little-endian byte sequence in buffer.
Relationship relate(Region const &r) const override
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Angle represents an angle in radians.
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this vector and v.
Box3d represents a box in ℝ³.
UnitVector3d is a unit vector in ℝ³ with components stored in double precision.
void encodeDouble(double item, std::vector< uint8_t > &buffer)
encode appends an IEEE double in little-endian byte order to the end of buffer.
static constexpr uint8_t TYPE_CODE
double dot(Vector3d const &v) const
dot returns the inner product of this unit vector and v.
This file declares a class for representing convex polygons with great circle edges on the unit spher...
Relationship relate(UnitVector3d const &v) const
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.