LSST Applications 24.1.6,g063fba187b+56b85ce14a,g0f08755f38+df8a265115,g12f32b3c4e+891a09f10d,g1524ad2192+7a5d7b3fbd,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g28da252d5a+07cb1400be,g2bbee38e9b+ae03bbfc84,g2bc492864f+ae03bbfc84,g3156d2b45e+6e55a43351,g347aa1857d+ae03bbfc84,g35bb328faa+a8ce1bb630,g3a166c0a6a+ae03bbfc84,g3e281a1b8c+c5dd892a6c,g414038480c+6b9177ef31,g41af890bb2+8f257c4c0b,g781aacb6e4+a8ce1bb630,g7af13505b9+7137b3b17d,g80478fca09+6df6903293,g82479be7b0+091ce1d07f,g858d7b2824+df8a265115,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,g9726552aa6+414189b318,ga5288a1d22+4a2bca08d7,gacef1a1666+c9a8ff65f4,gb58c049af0+d64f4d3760,gbcfae0f0a0+de1d42d831,gc28159a63d+ae03bbfc84,gcf0d15dbbd+72117bf34e,gda6a2b7d83+72117bf34e,gdaeeff99f8+1711a396fd,ge500cccec5+c8c9c9af63,ge79ae78c31+ae03bbfc84,gf0baf85859+c1f95f4921,gfa517265be+df8a265115,gfa999e8aa5+17cd334064,gfb92a5be7c+df8a265115
LSST Data Management Base Package
|
UnitVector3d
is a unit vector in ℝ³ with components stored in double precision.
More...
#include <UnitVector3d.h>
Public Member Functions | |
UnitVector3d () | |
The default constructor creates a unit vector equal to (1, 0, 0). | |
UnitVector3d (UnitVector3d const &v)=default | |
UnitVector3d (LonLat const &p) | |
This constructor creates the unit vector corresponding to the point p on the unit sphere. | |
UnitVector3d (Angle lon, Angle lat) | |
This constructor creates a unit vector corresponding to the given spherical coordinates. | |
operator Vector3d const & () const | |
This conversion operator returns a const reference to the underlying Vector3d. | |
bool | operator== (Vector3d const &v) const |
bool | operator!= (Vector3d const &v) const |
double const * | getData () const |
getData returns a pointer to the 3 components of this unit vector. | |
double | operator() (int i) const |
The function call operator returns the i -th component of this vector. | |
double | x () const |
double | y () const |
double | z () const |
double | dot (Vector3d const &v) const |
dot returns the inner product of this unit vector and v . | |
Vector3d | cross (Vector3d const &v) const |
cross returns the cross product of this unit vector and v . | |
Vector3d | robustCross (UnitVector3d const &v) const |
a.robustCross(b) is (b + a).cross(b - a) - twice the cross product of a and b. | |
UnitVector3d | operator- () const |
The unary minus operator negates every component of this unit vector. | |
Vector3d | operator* (double s) const |
The multiplication operator returns the component-wise product of this unit vector with scalar s . | |
Vector3d | operator/ (double s) const |
The division operator returns the component-wise quotient of this unit vector with scalar s . | |
Vector3d | operator+ (Vector3d const &v) const |
The addition operator returns the sum of this unit vector and v . | |
Vector3d | operator- (Vector3d const &v) const |
The subtraction operator returns the difference between this unit vector and v . | |
Vector3d | cwiseProduct (Vector3d const &v) const |
cwiseProduct returns the component-wise product of this unit vector and v . | |
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 according to the right hand rule. | |
UnitVector3d (Vector3d const &v) | |
UnitVector3d (double x, double y, double z) | |
Static Public Member Functions | |
static UnitVector3d | orthogonalTo (Vector3d const &v) |
orthogonalTo returns an arbitrary unit vector that is orthogonal to v. | |
static UnitVector3d | orthogonalTo (Vector3d const &v1, Vector3d const &v2) |
orthogonalTo returns the unit vector n orthogonal to both v1 and v2 and with the same direction as the cross product of v1 and v2. | |
static UnitVector3d | northFrom (Vector3d const &v) |
northFrom returns the unit vector orthogonal to v that points "north" from v. | |
static UnitVector3d | orthogonalTo (NormalizedAngle const &a) |
orthogonalTo returns the unit vector orthogonal to the meridian with the given longitude. | |
static UnitVector3d | fromNormalized (Vector3d const &v) |
fromNormalized returns the unit vector equal to v, which is assumed to be normalized. | |
static UnitVector3d | fromNormalized (double x, double y, double z) |
fromNormalized returns the unit vector with the given components, which are assumed to correspond to those of a normalized vector. | |
static UnitVector3d | X () |
static UnitVector3d | Y () |
static UnitVector3d | Z () |
UnitVector3d
is a unit vector in ℝ³ with components stored in double precision.
Conceptually, a UnitVector3d is a Vector3d. However, it does not inherit from Vector3d because all its mutators must correspond to isometries. Propagating this restriction to the Vector3d base class would make the base class unduly difficult to use. Furthermore, the base class assignment operator would have to be made virtual - otherwise it would be possible to cast a UnitVector3d reference to a Vector3d reference and then assign components yielding non-unit norm. For a class this compact and performance critical, the addition of a vtable pointer per instance and the potential for virtual call overhead on assignment is deemed prohibitive.
This class supports conversion from longitude and latitude angles. All methods that accept a LonLat
or equivalent angles shall convert from longitude/latitude to a unit vector according to the following conventions:
Definition at line 62 of file UnitVector3d.h.
|
inline |
The default constructor creates a unit vector equal to (1, 0, 0).
Definition at line 113 of file UnitVector3d.h.
|
default |
|
inlineexplicit |
This constructor creates a unit vector with the given direction.
Definition at line 119 of file UnitVector3d.h.
|
inline |
This constructor creates a unit vector with the given direction.
Definition at line 123 of file UnitVector3d.h.
|
inlineexplicit |
This constructor creates the unit vector corresponding to the point p
on the unit sphere.
Definition at line 130 of file UnitVector3d.h.
This constructor creates a unit vector corresponding to the given spherical coordinates.
Definition at line 70 of file UnitVector3d.cc.
cross
returns the cross product of this unit vector and v
.
Definition at line 162 of file UnitVector3d.h.
cwiseProduct
returns the component-wise product of this unit vector and v
.
Definition at line 194 of file UnitVector3d.h.
|
inline |
dot
returns the inner product of this unit vector and v
.
Definition at line 159 of file UnitVector3d.h.
|
inlinestatic |
fromNormalized
returns the unit vector with the given components, which are assumed to correspond to those of a normalized vector.
Use with caution - this assumption is not verified!
Definition at line 96 of file UnitVector3d.h.
|
inlinestatic |
fromNormalized
returns the unit vector equal to v, which is assumed to be normalized.
Use with caution - this assumption is not verified!
Definition at line 89 of file UnitVector3d.h.
|
inline |
getData
returns a pointer to the 3 components of this unit vector.
Definition at line 147 of file UnitVector3d.h.
|
static |
northFrom
returns the unit vector orthogonal to v that points "north" from v.
More precisely, it returns a unit vector orthogonal to v that lies in the plane defined by v, the north pole (0, 0, 1), and the origin. If v is colinear with the z axis, then (-1, 0, 0) is returned if v points north, and (1, 0, 0) is returned if v points south.
Definition at line 58 of file UnitVector3d.cc.
|
inline |
This conversion operator returns a const reference to the underlying Vector3d.
It allows a UnitVector3d to transparently replace a Vector3d as an argument in most function calls.
Definition at line 141 of file UnitVector3d.h.
|
inline |
Definition at line 144 of file UnitVector3d.h.
|
inline |
The function call operator returns the i
-th component of this vector.
Definition at line 150 of file UnitVector3d.h.
|
inline |
The multiplication operator returns the component-wise product of this unit vector with scalar s
.
Definition at line 179 of file UnitVector3d.h.
The addition operator returns the sum of this unit vector and v
.
Definition at line 186 of file UnitVector3d.h.
|
inline |
The unary minus operator negates every component of this unit vector.
Definition at line 173 of file UnitVector3d.h.
The subtraction operator returns the difference between this unit vector and v
.
Definition at line 190 of file UnitVector3d.h.
|
inline |
The division operator returns the component-wise quotient of this unit vector with scalar s
.
Definition at line 183 of file UnitVector3d.h.
|
inline |
Definition at line 143 of file UnitVector3d.h.
|
inlinestatic |
orthogonalTo
returns the unit vector orthogonal to the meridian with the given longitude.
Definition at line 83 of file UnitVector3d.h.
|
static |
orthogonalTo
returns an arbitrary unit vector that is orthogonal to v.
Definition at line 41 of file UnitVector3d.cc.
|
static |
orthogonalTo
returns the unit vector n orthogonal to both v1 and v2 and with the same direction as the cross product of v1 and v2.
If v1 and v2 are nearly (anti)parallel, then an arbitrary unit vector orthogonal to v1 is returned.
Definition at line 48 of file UnitVector3d.cc.
|
inline |
a.robustCross(b)
is (b + a).cross(b - a)
- twice the cross product of a and b.
The result is almost orthogonal to a and b even for nearly (anti-)parallel unit vectors. The idea comes from the Google S2 library.
Definition at line 168 of file UnitVector3d.h.
|
inline |
rotatedAround
returns a copy of this unit vector, rotated around the unit vector k
by angle a
according to the right hand rule.
Definition at line 200 of file UnitVector3d.h.
|
inlinestatic |
Definition at line 100 of file UnitVector3d.h.
|
inline |
Definition at line 152 of file UnitVector3d.h.
|
inlinestatic |
Definition at line 104 of file UnitVector3d.h.
|
inline |
Definition at line 154 of file UnitVector3d.h.
|
inlinestatic |
Definition at line 108 of file UnitVector3d.h.
|
inline |
Definition at line 156 of file UnitVector3d.h.