BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Public Member Functions | Private Member Functions | List of all members
BALL::TVector3< T > Class Template Reference

#include <BALL/MATHS/vector3.h>

Public Member Functions

template<typename T2 >
BALL_INLINE TVector3 (const TVector3< T2 > &vec)
 
Constructors and Destructors
 TVector3 ()
 
 TVector3 (const T *ptr)
 
 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
 
TVector3operator/= (const T &lambda)
 
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. More...
 
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)
 
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)
 
void get (T *ptr) const
 
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 ()
 
TVector3negate ()
 
T & operator[] (Position position)
 
const T & operator[] (Position position) const
 
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
 
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 38 of file vector3.h.

Constructor & Destructor Documentation

template<typename T >
BALL_INLINE BALL::TVector3< T >::TVector3 ( )

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

Definition at line 534 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const T *  ptr)
explicit

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

Parameters
ptrthe array to construct from
Exceptions
NullPointerif ptr == 0

Definition at line 543 of file vector3.h.

template<typename T>
BALL_INLINE BALL::TVector3< T >::TVector3 ( const T &  value)
explicit

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

Parameters
valuethe value of all components

Definition at line 557 of file vector3.h.

template<typename T>
template<typename T2 >
BALL::TVector3< T >::TVector3 ( const TVector3< T2 > &  vec)
explicit

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

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

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

Parameters
vxassigned to x
vyassigned to y
vzassigned to z

Definition at line 575 of file vector3.h.

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

Copy constructor. Create a new TVector3 object from another.

Parameters
vectorthe TVector3 object to be copied

Definition at line 584 of file vector3.h.

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

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
rthe radius
phithe azimuth
thetathe co-latitude

Definition at line 593 of file vector3.h.

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

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

Definition at line 602 of file vector3.h.

template<typename T>
template<typename T2 >
BALL_INLINE BALL::TVector3< T >::TVector3 ( const TVector3< T2 > &  vec)

Definition at line 566 of file vector3.h.

Member Function Documentation

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

Clear method The values are set to 0.

Definition at line 608 of file vector3.h.

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

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 1069 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::get ( T *  ptr) const

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

Parameters
ptrthe array
Exceptions
NullPointerif ptr == 0

Definition at line 699 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::get ( T &  x,
T &  y,
T &  z 
) const

Assign to three variables of type T.

Parameters
xthe x component
ythe y component
zthe z component

Definition at line 713 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
vectorthe vector to be assigned to
template<typename T>
BALL_INLINE void BALL::TVector3< T >::get ( T &  r,
TAngle< T > &  phi,
TAngle< T > &  theta 
) const

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

Parameters
rthe radius (returned)
phithe azimuth (returned)
thetathe co-latitude (returned)

Definition at line 731 of file vector3.h.

template<typename T>
BALL_INLINE TAngle< T > BALL::TVector3< T >::getAngle ( const TVector3< T > &  vector) const

Return the enclosed angle of two vectors.

Exceptions
Exception::DivisionByZeroif the product of the squared lengths of the two vectors equals (T)0

Definition at line 971 of file vector3.h.

template<typename T>
TAngle<T> BALL::TVector3< T >::getAngle_ ( const T &  a,
const T &  b 
) const
inlineprivate

Definition at line 502 of file vector3.h.

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

Return the distance to another vector.

Definition at line 949 of file vector3.h.

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

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 757 of file vector3.h.

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

Return the orthogonal projection of this vector onto another.

Parameters
directionthe vector to project onto

Definition at line 995 of file vector3.h.

template<typename T>
TVector3< T > 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
a1st vector
b2nd vector
c3rd vector
Returns
TVector3 the perpendicular normalization

Definition at line 1002 of file vector3.h.

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

Return the squared distance to another vector.

Definition at line 960 of file vector3.h.

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

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 764 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 
)
static

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

Parameters
afirst vector
bsecond vector
vthird vector
Returns
T the triple product

Definition at line 1016 of file vector3.h.

template<typename T >
BALL_INLINE const TVector3< T > & BALL::TVector3< T >::getUnit ( )
static

Return a vector with all components 1.

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

Definition at line 806 of file vector3.h.

template<typename T >
BALL_INLINE const TVector3< T > & BALL::TVector3< T >::getZero ( )
static

Return a vector with all components 0.

Definition at line 798 of file vector3.h.

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

Orthogonality predicate.

Definition at line 1049 of file vector3.h.

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

Test if instance is valid. Always returns true.

Returns
bool true

Definition at line 1056 of file vector3.h.

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

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

Definition at line 1063 of file vector3.h.

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

Negate the vector. Negate the three components of the vector

Returns
T, a reference to {*this} vector

Definition at line 788 of file vector3.h.

template<typename T >
TVector3< T > & BALL::TVector3< T >::normalize ( )

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
DivisionByZeroif the length of the vector is 0

Definition at line 770 of file vector3.h.

template<typename T>
BALL_INLINE 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

Definition at line 1042 of file vector3.h.

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

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

Definition at line 934 of file vector3.h.

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

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

Definition at line 941 of file vector3.h.

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

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

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

Definition at line 886 of file vector3.h.

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)

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

Parameters
scalarthe to multiply by
Returns
TVector3&, {*this}

Definition at line 893 of file vector3.h.

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

Positive sign.

Definition at line 850 of file vector3.h.

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 TVector3< T > &  vector)

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

Parameters
vectorthe vector to add
Returns
TVector3&, {*this}

Definition at line 864 of file vector3.h.

template<typename T >
BALL_INLINE TVector3< T > BALL::TVector3< T >::operator- ( ) const

Negative sign.

Definition at line 857 of file vector3.h.

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 TVector3< T > &  vector)

Subtract a vector from this vector.

Parameters
vectorthe vector to subtract
Returns
TVector3&, {*this}

Definition at line 875 of file vector3.h.

template<typename T>
TVector3< T > BALL::TVector3< T >::operator/ ( const T &  lambda) const

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

Parameters
lambdathe scalar value to divide by
Returns
TVector3&
Exceptions
Exception::DivisionByZeroif lambda == (T)0

Definition at line 903 of file vector3.h.

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

Divide a vector by a scalar.

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

Definition at line 913 of file vector3.h.

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

Needed for MSVC.

Definition at line 1034 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
vthe vector to assign from
template<typename T>
BALL_INLINE TVector3< T > & BALL::TVector3< T >::operator= ( value)

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

Parameters
valuethe constant to assign to x, y, z

Definition at line 690 of file vector3.h.

template<typename T>
BALL_INLINE TVector3< T > & BALL::TVector3< T >::operator= ( const T *  ptr)

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

Parameters
ptrthe array
Exceptions
NullPointerif ptr == 0

Definition at line 663 of file vector3.h.

template<typename T>
BALL_INLINE 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

Definition at line 1027 of file vector3.h.

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

Mutable array-like access to the components.

Exceptions
Exception::IndexOverflowif index > 2

Definition at line 814 of file vector3.h.

template<typename T >
BALL_INLINE const T & BALL::TVector3< T >::operator[] ( Position  position) const

Constant array-like access to the components.

Exceptions
Exception::IndexOverflowif index > 2

Definition at line 832 of file vector3.h.

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

Persistent stream reading.

Definition at line 1109 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T *  ptr)

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
ptran array
Exceptions
Nullpointerif ptr == 0

Definition at line 615 of file vector3.h.

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

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

Parameters
valuethe new value of the components

Definition at line 627 of file vector3.h.

template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T &  vx,
const T &  vy,
const T &  vz 
)

Assign the vector components.

Parameters
vxthe new x component
vythe new y component
vzthe new z component

Definition at line 636 of file vector3.h.

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

Assign from another TVector3.

Parameters
vectorthe TVector3 object to assign from
template<typename T>
BALL_INLINE void BALL::TVector3< T >::set ( const T &  r,
const TAngle< T > &  phi,
const TAngle< T > &  theta 
)

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
rthe radius
phithe azimuth
thetathe co-latitude

Definition at line 654 of file vector3.h.

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

Swap the contents of two vectors.

Parameters
vectorthe vector to swap contents with

Definition at line 740 of file vector3.h.

template<typename T >
void BALL::TVector3< T >::write ( PersistenceManager pm) const

Persistent stream writing.

Definition at line 1101 of file vector3.h.

Member Data Documentation

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

x component of the vector

Definition at line 489 of file vector3.h.

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

y component of the vector

Definition at line 493 of file vector3.h.

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

z component of the vector

Definition at line 497 of file vector3.h.