BALL::TVector3< T > Class Template Reference
[Three-dimensional vector.]

#include <BALL/MATHS/vector3.h>

List of all members.

Public Member Functions

Constructors and Destructors

 TVector3 ()
 TVector3 (const T *ptr) throw (Exception::NullPointer)
 TVector3 (const T &value)
template<typename T2 >
 TVector3 (const TVector3< T2 > &vec)
 TVector3 (const T &vx, const T &vy, const T &vz)
 TVector3 (const TVector3 &vector)
 TVector3 (const T &r, const TAngle< T > &phi, const TAngle< T > &theta)
 ~TVector3 ()
void clear ()
Arithmetic operators

const TVector3operator+ () const
TVector3 operator- () const
TVector3 operator+ (const TVector3 &b) const
TVector3 operator- (const TVector3 &b) const
TVector3operator+= (const TVector3 &vector)
TVector3operator-= (const TVector3 &vector)
TVector3 operator* (const T &scalar) const
TVector3operator*= (const T &scalar)
TVector3 operator/ (const T &lambda) const throw (Exception::DivisionByZero)
TVector3operator/= (const T &lambda) throw (Exception::DivisionByZero)
operator* (const TVector3 &vector) const
TVector3 operator% (const TVector3 &vector) const
TVector3operator%= (const TVector3 &vector)
Predicates

bool operator== (const TVector3 &vector) const
bool operator!= (const TVector3 &vector) const
bool operator< (const TVector3 &vector) const
 Needed for MSVC.
bool isZero () const
bool isOrthogonalTo (const TVector3 &vector) const
Storable Interface

void write (PersistenceManager &pm) const
bool read (PersistenceManager &pm)
Debugging and Diagnostics

void dump (std::ostream &s=std::cout, Size depth=0) const
bool isValid () const

Public Attributes

Vector components

For easier access, the three components of the vector are public members.

x
y
z

Private Member Functions

TAngle< T > getAngle_ (const T &a, const T &b) const

Assignment



void set (const T *ptr) throw (Exception::NullPointer)
void set (const T &value)
void set (const T &vx, const T &vy, const T &vz)
void set (const TVector3 &vector)
void set (const T &r, const TAngle< T > &phi, const TAngle< T > &theta)
TVector3operator= (const TVector3 &v)
TVector3operator= (T value)
TVector3operator= (const T *ptr) throw (Exception::NullPointer)
void get (T *ptr) const throw (Exception::NullPointer)
void get (T &x, T &y, T &z) const
void get (TVector3 &vector) const
void get (T &r, TAngle< T > &phi, TAngle< T > &theta) const
void swap (TVector3 &vector)
getLength () const
getSquareLength () const
TVector3normalize () throw (Exception::DivisionByZero)
TVector3negate ()
T & operator[] (Position position) throw (Exception::IndexOverflow)
const T & operator[] (Position position) const throw (Exception::IndexOverflow)
static const TVector3getZero ()
static const TVector3getUnit ()

Geometric properties



getDistance (const TVector3 &vector) const
getSquareDistance (const TVector3 &vector) const
TAngle< T > getAngle (const TVector3 &vector) const throw (Exception::DivisionByZero)
TVector3 getOrthogonalProjection (const TVector3 &direction) const
static TVector3 getPerpendicularNormalization (const TVector3 &a, const TVector3 &b, const TVector3 &c)
static T getTripleProduct (const TVector3< T > &a, const TVector3< T > &b, const TVector3< T > &c)

Detailed Description

template<typename T>
class BALL::TVector3< T >

Generic Three-Dimensional Vector.

Definition at line 72 of file vector3.h.


Constructor & Destructor Documentation

template<typename T >
BALL_INLINE BALL::TVector3< T >::TVector3 (  )  [inline]

Default constructor. This method creates a new TVector3 object. The three components are initialized to (T)0.

Definition at line 546 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const T *  ptr  )  throw (Exception::NullPointer) [inline, explicit]

Array constructor. This constructor creates a TVector3 object from the first three elements pointed to by ptr.

Parameters:
ptr the array to construct from
Exceptions:
NullPointer if ptr == 0

Definition at line 555 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const T &  value  )  [inline, explicit]

Scalar constructor. Create a new vector with all components set to the same value.

Parameters:
value the value of all components

Definition at line 570 of file vector3.h.

template<typename T >
template<typename T2 >
BALL_INLINE BALL::TVector3< T >::TVector3 ( const TVector3< T2 > &  vec  )  [inline, explicit]

Explicit type conversion constructor between a vector of type T and T2

Definition at line 579 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const T &  vx,
const T &  vy,
const T &  vz 
) [inline]

Detailed constructor. Create a new TVector3 object from three variables of type T.

Parameters:
vx assigned to x
vy assigned to y
vz assigned to z

Definition at line 588 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const TVector3< T > &  vector  )  [inline]

Copy constructor. Create a new TVector3 object from another.

Parameters:
vector the TVector3 object to be copied

Definition at line 597 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const T &  r,
const TAngle< T > &  phi,
const TAngle< T > &  theta 
) [inline]

Spherical polar coordinate constructor. Create a TVector3 object and set its coordinates to the point described by the three spherical polar coordinates r (radius), phi (azimuth), and theta (co-latitude).

See also:
set(const T& r, const TAngle<T>& phi, const TAngle<T>& theta)
Parameters:
r the radius
phi the azimuth
theta the co-latitude

Definition at line 606 of file vector3.h.

template<typename T >
BALL_INLINE BALL::TVector3< T >::~TVector3 (  )  [inline]

Destructor. Destructs the TVector3 object. As there are no dynamic data structures, nothing happens.

Definition at line 615 of file vector3.h.


Member Function Documentation

template<typename T >
BALL_INLINE void BALL::TVector3< T >::clear (  )  [inline]

Clear method The values are set to 0.

Definition at line 621 of file vector3.h.

template<typename T >
void BALL::TVector3< T >::dump ( std::ostream &  s = std::cout,
Size  depth = 0 
) const [inline]

Internal state dump. Dump the current internal state of {*this} to the output ostream s with dumping depth depth .

Parameters:
s - output stream where to output the internal state of {*this}
depth - the dumping depth

Definition at line 1091 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::get ( T &  r,
TAngle< T > &  phi,
TAngle< T > &  theta 
) const [inline]

Assign to polar coordinates. Sets r, phi, and theta to the coordinates of the vector in spherical polar coordinates.

Parameters:
r the radius (returned)
phi the azimuth (returned)
theta the co-latitude (returned)

Definition at line 747 of file vector3.h.

template<typename T>
void BALL::TVector3< T >::get ( TVector3< T > &  vector  )  const

Assign to another Vector3. Assigns the vector components to another vector.

Parameters:
vector the vector to be assigned to
template<typename T>
BALL_INLINE void BALL::TVector3< T >::get ( T &  x,
T &  y,
T &  z 
) const [inline]

Assign to three variables of type T.

Parameters:
x the x component
y the y component
z the z component

Definition at line 729 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::get ( T *  ptr  )  const throw (Exception::NullPointer) [inline]

Assign to an array. Sets the first three array elements pointed to by ptr to the values of the three vector components.

Parameters:
ptr the array
Exceptions:
NullPointer if ptr == 0

Definition at line 714 of file vector3.h.

template<typename T>
TAngle<T> BALL::TVector3< T >::getAngle ( const TVector3< T > &  vector  )  const throw (Exception::DivisionByZero)

Return the enclosed angle of two vectors.

Exceptions:
Exception::DivisionByZero if the product of the squared lengths of the two vectors equals (T)0
template<typename T>
TAngle<T> BALL::TVector3< T >::getAngle_ ( const T &  a,
const T &  b 
) const [inline, private]

Definition at line 514 of file vector3.h.

template<typename T>
T BALL::TVector3< T >::getDistance ( const TVector3< T > &  vector  )  const

Return the distance to another vector.

template<typename T >
BALL_INLINE T BALL::TVector3< T >::getLength (  )  const [inline]

Return the length of the vector. The length of the vector is calculated as $\sqrt{x^2 + y^2 + z^2}$.

Returns:
T, the vector length

Definition at line 773 of file vector3.h.

template<typename T>
TVector3 BALL::TVector3< T >::getOrthogonalProjection ( const TVector3< T > &  direction  )  const

Return the orthogonal projection of this vector onto another.

Parameters:
direction the vector to project onto
template<typename T>
static TVector3 BALL::TVector3< T >::getPerpendicularNormalization ( const TVector3< T > &  a,
const TVector3< T > &  b,
const TVector3< T > &  c 
) [static]

Return the perpendicular normalization of the vector

Parameters:
a 1st vector
b 2nd vector
c 3rd vector
Returns:
TVector3 the perpendicular normalization
template<typename T>
T BALL::TVector3< T >::getSquareDistance ( const TVector3< T > &  vector  )  const

Return the squared distance to another vector.

template<typename T >
BALL_INLINE T BALL::TVector3< T >::getSquareLength (  )  const [inline]

Return the squared length of the vector. This method avoids the square root needed in getLength, so this method is preferred if possible.

Returns:
T, $x^2 + y^2 + z^2$

Definition at line 780 of file vector3.h.

template<typename T>
BALL_INLINE T BALL::TVector3< T >::getTripleProduct ( const TVector3< T > &  a,
const TVector3< T > &  b,
const TVector3< T > &  c 
) [inline, static]

Triple product of three vectors. Calculate the parallelepipedal product of three vectors.

Parameters:
a first vector
b second vector
v third vector
Returns:
T the triple product

Definition at line 1038 of file vector3.h.

template<typename T >
BALL_INLINE const TVector3< T > & BALL::TVector3< T >::getUnit (  )  [inline, static]

Return a vector with all components 1.

Returns:
: TVector4(1, 1, 1, 1)

Definition at line 823 of file vector3.h.

template<typename T >
BALL_INLINE const TVector3< T > & BALL::TVector3< T >::getZero (  )  [inline, static]

Return a vector with all components 0.

Definition at line 815 of file vector3.h.

template<typename T>
bool BALL::TVector3< T >::isOrthogonalTo ( const TVector3< T > &  vector  )  const

Orthogonality predicate.

template<typename T >
BALL_INLINE bool BALL::TVector3< T >::isValid (  )  const [inline]

Test if instance is valid. Always returns true.

Returns:
bool true

Definition at line 1078 of file vector3.h.

template<typename T >
BALL_INLINE bool BALL::TVector3< T >::isZero (  )  const [inline]

Zero predicate. The function Maths::isZero is used to compare the values with zero. Maths::isZero

Definition at line 1085 of file vector3.h.

template<typename T >
BALL_INLINE TVector3< T > & BALL::TVector3< T >::negate (  )  [inline]

Negate the vector. Negate the three components of the vector

Returns:
T, a reference to {*this} vector

Definition at line 805 of file vector3.h.

template<typename T >
TVector3< T > & BALL::TVector3< T >::normalize (  )  throw (Exception::DivisionByZero) [inline]

Normalize the vector. The vector is scaled with its length: $\{x|y|z\} *= \sqrt{x^2 + y^2 + z^2}$.

Returns:
T, a reference to the normalized vector
Exceptions:
DivisionByZero if the length of the vector is 0

Definition at line 786 of file vector3.h.

template<typename T>
bool BALL::TVector3< T >::operator!= ( const TVector3< T > &  vector  )  const

Inequality operator. The function Maths::isEqual is used to compare the values. Maths::isEqual

Returns:
bool, true if the two vectors differ in at least one component, false otherwise
template<typename T>
TVector3 BALL::TVector3< T >::operator% ( const TVector3< T > &  vector  )  const

Cross product. Return the cross product of this vector and vector.

template<typename T>
TVector3& BALL::TVector3< T >::operator%= ( const TVector3< T > &  vector  ) 

Assign to the cross product. Assign the vector to its cross product with another vector.

template<typename T>
T BALL::TVector3< T >::operator* ( const TVector3< T > &  vector  )  const

Dot product. Return the dot product of this vector and vector.

template<typename T>
BALL_INLINE TVector3< T > BALL::TVector3< T >::operator* ( const T &  scalar  )  const [inline]

Scalar product. Return TVector3(x * scalar, y * scalar, z * scalar).

Parameters:
scalar,the scalar to multiply by
Returns:
TVector3 the scalar product of this vector and scalar

Definition at line 905 of file vector3.h.

template<typename T>
BALL_INLINE TVector3< T > & BALL::TVector3< T >::operator*= ( const T &  scalar  )  [inline]

Multiply by a scalar. Multiply all components of the vector by a scalar value.

Parameters:
scalar the to multiply by
Returns:
TVector3&, {*this}

Definition at line 912 of file vector3.h.

template<typename T>
TVector3 BALL::TVector3< T >::operator+ ( const TVector3< T > &  b  )  const
template<typename T >
BALL_INLINE const TVector3< T > & BALL::TVector3< T >::operator+ (  )  const [inline]

Positive sign.

Definition at line 869 of file vector3.h.

template<typename T>
TVector3& BALL::TVector3< T >::operator+= ( const TVector3< T > &  vector  ) 

Add a vector to this vector. Add the components of vector to this vector.

Parameters:
vector the vector to add
Returns:
TVector3&, {*this}
template<typename T>
TVector3 BALL::TVector3< T >::operator- ( const TVector3< T > &  b  )  const
template<typename T >
BALL_INLINE TVector3< T > BALL::TVector3< T >::operator- (  )  const [inline]

Negative sign.

Definition at line 876 of file vector3.h.

template<typename T>
TVector3& BALL::TVector3< T >::operator-= ( const TVector3< T > &  vector  ) 

Subtract a vector from this vector.

Parameters:
vector the vector to subtract
Returns:
TVector3&, {*this}
template<typename T>
TVector3< T > BALL::TVector3< T >::operator/ ( const T &  lambda  )  const throw (Exception::DivisionByZero) [inline]

Fraction of a vector. Return TVector3(x / lambda, y / lambda, z / lambda).

Parameters:
lambda the scalar value to divide by
Returns:
TVector3&
Exceptions:
Exception::DivisionByZero if lambda == (T)0

Definition at line 922 of file vector3.h.

template<typename T>
TVector3< T > & BALL::TVector3< T >::operator/= ( const T &  lambda  )  throw (Exception::DivisionByZero) [inline]

Divide a vector by a scalar.

Parameters:
lambda the scalar value to divide by
Returns:
TVector3&, {*this}
Exceptions:
Exception::DivisionByZero if lambda == (T)0

Definition at line 933 of file vector3.h.

template<typename T>
bool BALL::TVector3< T >::operator< ( const TVector3< T > &  vector  )  const

Needed for MSVC.

template<typename T>
BALL_INLINE TVector3< T > & BALL::TVector3< T >::operator= ( const T *  ptr  )  throw (Exception::NullPointer) [inline]

Array assignment operator. Assigns the first three elements of an array to the vector components.

Parameters:
ptr the array
Exceptions:
NullPointer if ptr == 0

Definition at line 677 of file vector3.h.

template<typename T>
BALL_INLINE TVector3< T > & BALL::TVector3< T >::operator= ( value  )  [inline]

Assignment operator. Assign a constant value to all three vector components.

Parameters:
value the constant to assign to x, y, z

Definition at line 705 of file vector3.h.

template<typename T>
TVector3& BALL::TVector3< T >::operator= ( const TVector3< T > &  v  ) 

Assignment operator. Assign the vector components from another vector.

Parameters:
v the vector to assign from
template<typename T>
bool BALL::TVector3< T >::operator== ( const TVector3< T > &  vector  )  const

Equality operator. The function Maths::isEqual is used to compare the values. Maths::isEqual

Returns:
bool, true if all three vector components are equal, false otherwise
template<typename T >
BALL_INLINE const T & BALL::TVector3< T >::operator[] ( Position  position  )  const throw (Exception::IndexOverflow) [inline]

Constant array-like access to the components.

Exceptions:
Exception::IndexOverflow if index > 2

Definition at line 850 of file vector3.h.

template<typename T >
BALL_INLINE T & BALL::TVector3< T >::operator[] ( Position  position  )  throw (Exception::IndexOverflow) [inline]

Mutable array-like access to the components.

Exceptions:
Exception::IndexOverflow if index > 2

Definition at line 831 of file vector3.h.

template<typename T >
bool BALL::TVector3< T >::read ( PersistenceManager pm  )  [inline]

Persistent stream reading.

Definition at line 1131 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T &  r,
const TAngle< T > &  phi,
const TAngle< T > &  theta 
) [inline]

Assign from spherical polar coordinates. The radius describes the distance of the point from the origin.

phi ranges from 0 to $2 \pi$, theta ranges from 0 (north pole, positive z-axis) to $\pi$ (south pole, negative z-axis).
Coordinates are calculated according to the following formulae:

\[ x = r \sin \theta \cos \phi \]

\[ y = r \sin \theta \sin \phi \]

\[ z = r \cos \theta \]

Parameters:
r the radius
phi the azimuth
theta the co-latitude

Definition at line 668 of file vector3.h.

template<typename T>
void BALL::TVector3< T >::set ( const TVector3< T > &  vector  ) 

Assign from another TVector3.

Parameters:
vector the TVector3 object to assign from
template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T &  vx,
const T &  vy,
const T &  vz 
) [inline]

Assign the vector components.

Parameters:
vx the new x component
vy the new y component
vz the new z component

Definition at line 650 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T &  value  )  [inline]

Assign from a scalar. Assign value to the three vector components.

Parameters:
value the new value of the components

Definition at line 641 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T *  ptr  )  throw (Exception::NullPointer) [inline]

Assign from an array. Assign the three components x, y, and z from the first three elements of the array pointed to by ptr.

Parameters:
ptr an array
Exceptions:
Nullpointer if ptr == 0

Definition at line 628 of file vector3.h.

template<typename T>
void BALL::TVector3< T >::swap ( TVector3< T > &  vector  ) 

Swap the contents of two vectors.

Parameters:
vector the vector to swap contents with
template<typename T >
void BALL::TVector3< T >::write ( PersistenceManager pm  )  const [inline]

Persistent stream writing.

Definition at line 1123 of file vector3.h.


Member Data Documentation

template<typename T>
T BALL::TVector3< T >::x

x component of the vector

Definition at line 501 of file vector3.h.

template<typename T>
T BALL::TVector3< T >::y

y component of the vector

Definition at line 505 of file vector3.h.

template<typename T>
T BALL::TVector3< T >::z

z component of the vector

Definition at line 509 of file vector3.h.

Generated by  doxygen 1.6.3