lsst.sphgeom g0f31348038+164b02c8d4
|
#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) | |
UnitVector3d (Angle lon, Angle lat) | |
operator Vector3d const & () const | |
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 |
UnitVector3d | operator- () const |
The unary minus operator negates every component of this unit vector. | |
Vector3d | operator* (double s) const |
Vector3d | operator/ (double s) const |
Vector3d | operator+ (Vector3d const &v) const |
The addition operator returns the sum of this unit vector and v . | |
Vector3d | operator- (Vector3d const &v) const |
Vector3d | cwiseProduct (Vector3d const &v) const |
UnitVector3d | rotatedAround (UnitVector3d const &k, Angle a) const |
UnitVector3d (Vector3d const &v) | |
UnitVector3d (double x, double y, double z) | |
Static Public Member Functions | |
static UnitVector3d | orthogonalTo (Vector3d const &v) |
static UnitVector3d | orthogonalTo (Vector3d const &v1, Vector3d const &v2) |
static UnitVector3d | northFrom (Vector3d const &v) |
static UnitVector3d | orthogonalTo (NormalizedAngle const &a) |
static UnitVector3d | fromNormalized (Vector3d const &v) |
static UnitVector3d | fromNormalized (double x, double y, double z) |
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:
|
inlineexplicit |
This constructor creates a unit vector with the given direction.
|
inlineexplicit |
This constructor creates the unit vector corresponding to the point p
on the unit sphere.
This constructor creates a unit vector corresponding to the given spherical coordinates.
cwiseProduct
returns the component-wise product of this unit vector and v
.
|
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!
|
inlinestatic |
fromNormalized
returns the unit vector equal to v, which is assumed to be normalized. Use with caution - this assumption is not verified!
|
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.
|
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.
|
inline |
The multiplication operator returns the component-wise product of this unit vector with scalar s
.
The subtraction operator returns the difference between this unit vector and v
.
|
inline |
The division operator returns the component-wise quotient of this unit vector with scalar s
.
|
inlinestatic |
orthogonalTo
returns the unit vector orthogonal to the meridian with the given longitude.
|
static |
orthogonalTo
returns an arbitrary unit vector that is orthogonal to v.
|
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.
|
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.
|
inline |
rotatedAround
returns a copy of this unit vector, rotated around the unit vector k
by angle a
according to the right hand rule.