lsst.sphgeom g161b0bc589+ac198e9f13
Public Member Functions | Static Public Member Functions | List of all members
lsst::sphgeom::UnitVector3d Class Reference

#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 ()
 

Detailed Description

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:

Constructor & Destructor Documentation

◆ UnitVector3d() [1/3]

lsst::sphgeom::UnitVector3d::UnitVector3d ( Vector3d const &  v)
inlineexplicit

This constructor creates a unit vector with the given direction.

◆ UnitVector3d() [2/3]

lsst::sphgeom::UnitVector3d::UnitVector3d ( LonLat const &  p)
inlineexplicit

This constructor creates the unit vector corresponding to the point p on the unit sphere.

◆ UnitVector3d() [3/3]

lsst::sphgeom::UnitVector3d::UnitVector3d ( Angle  lon,
Angle  lat 
)

This constructor creates a unit vector corresponding to the given spherical coordinates.

Member Function Documentation

◆ cwiseProduct()

Vector3d lsst::sphgeom::UnitVector3d::cwiseProduct ( Vector3d const &  v) const
inline

cwiseProduct returns the component-wise product of this unit vector and v.

◆ fromNormalized() [1/2]

static UnitVector3d lsst::sphgeom::UnitVector3d::fromNormalized ( double  x,
double  y,
double  z 
)
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!

◆ fromNormalized() [2/2]

static UnitVector3d lsst::sphgeom::UnitVector3d::fromNormalized ( Vector3d const &  v)
inlinestatic

fromNormalized returns the unit vector equal to v, which is assumed to be normalized. Use with caution - this assumption is not verified!

◆ northFrom()

UnitVector3d lsst::sphgeom::UnitVector3d::northFrom ( Vector3d const &  v)
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.

◆ operator Vector3d const &()

lsst::sphgeom::UnitVector3d::operator Vector3d const & ( ) const
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.

◆ operator*()

Vector3d lsst::sphgeom::UnitVector3d::operator* ( double  s) const
inline

The multiplication operator returns the component-wise product of this unit vector with scalar s.

◆ operator-()

Vector3d lsst::sphgeom::UnitVector3d::operator- ( Vector3d const &  v) const
inline

The subtraction operator returns the difference between this unit vector and v.

◆ operator/()

Vector3d lsst::sphgeom::UnitVector3d::operator/ ( double  s) const
inline

The division operator returns the component-wise quotient of this unit vector with scalar s.

◆ orthogonalTo() [1/3]

static UnitVector3d lsst::sphgeom::UnitVector3d::orthogonalTo ( NormalizedAngle const &  a)
inlinestatic

orthogonalTo returns the unit vector orthogonal to the meridian with the given longitude.

◆ orthogonalTo() [2/3]

UnitVector3d lsst::sphgeom::UnitVector3d::orthogonalTo ( Vector3d const &  v)
static

orthogonalTo returns an arbitrary unit vector that is orthogonal to v.

◆ orthogonalTo() [3/3]

UnitVector3d lsst::sphgeom::UnitVector3d::orthogonalTo ( Vector3d const &  v1,
Vector3d const &  v2 
)
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.

◆ robustCross()

Vector3d lsst::sphgeom::UnitVector3d::robustCross ( UnitVector3d const &  v) const
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.

◆ rotatedAround()

UnitVector3d lsst::sphgeom::UnitVector3d::rotatedAround ( UnitVector3d const &  k,
Angle  a 
) const
inline

rotatedAround returns a copy of this unit vector, rotated around the unit vector k by angle a according to the right hand rule.


The documentation for this class was generated from the following files: