// @(#)root/mathcore:$Id$
// Authors: W. Brown, M. Fischler, L. Moneta    2005

/**********************************************************************
*                                                                    *
* Copyright (c) 2005 , LCG ROOT MathLib Team and                     *
*                      FNAL LCG ROOT MathLib Team                    *
*                                                                    *
*                                                                    *
**********************************************************************/

// Header source file for class DisplacementVector3D
//
// Created by: Lorenzo Moneta  at Mon May 30 12:21:43 2005
// Major rewrite: M. FIschler  at Wed Jun  8  2005
//
// Last update: $Id$
//

#ifndef ROOT_Math_GenVector_DisplacementVector3D
#define ROOT_Math_GenVector_DisplacementVector3D  1

#ifndef ROOT_Math_GenVector_Cartesian3D
#include "Math/GenVector/Cartesian3D.h"
#endif

#ifndef ROOT_Math_GenVector_PositionVector3Dfwd
#include "Math/GenVector/PositionVector3Dfwd.h"
#endif

#ifndef ROOT_Math_GenVector_GenVectorIO
#include "Math/GenVector/GenVectorIO.h"
#endif

#ifndef ROOT_Math_GenVector_BitReproducible
#include "Math/GenVector/BitReproducible.h"
#endif

#ifndef ROOT_Math_GenVector_CoordinateSystemTags
#include "Math/GenVector/CoordinateSystemTags.h"
#endif

#include <cassert>

//doxygen tag
/**
@defgroup GenVector GenVector
Generic 2D, 3D and 4D vectors classes and their transformations (rotations). More information is available at the
*/

namespace ROOT {

namespace Math {

//__________________________________________________________________________________________
/**
Class describing a generic displacement vector in 3 dimensions.
This class is templated on the type of Coordinate system.
One example is the XYZVector which is a vector based on
double precision x,y,z data members by using the
ROOT::Math::Cartesian3D<double> Coordinate system.
The class is having also an extra template parameter, the coordinate system tag,
to be able to identify (tag) vector described in different reference coordinate system,
like global or local coordinate systems.

@ingroup GenVector
*/

template <class CoordSystem, class Tag = DefaultCoordinateSystemTag >
class DisplacementVector3D {

public:

typedef typename CoordSystem::Scalar Scalar;
typedef CoordSystem CoordinateType;
typedef Tag  CoordinateSystemTag;

// ------ ctors ------

/**
Default constructor. Construct an empty object with zero values
*/
DisplacementVector3D ( ) :   fCoordinates()  { }

/**
Construct from three values of type <em>Scalar</em>.
In the case of a XYZVector the values are x,y,z
In the case of  a polar vector they are r,theta, phi
*/
DisplacementVector3D(Scalar a, Scalar b, Scalar c) :
fCoordinates ( a , b,  c )  { }

/**
Construct from a displacement vector expressed in different
coordinates, or using a different Scalar type, but with same coordinate system tag
*/
template <class OtherCoords>
explicit DisplacementVector3D( const DisplacementVector3D<OtherCoords, Tag> & v) :
fCoordinates ( v.Coordinates() ) { }

/**
Construct from a position vector expressed in different coordinates
but with the same coordinate system tag
*/
template <class OtherCoords>
explicit DisplacementVector3D( const PositionVector3D<OtherCoords,Tag> & p) :
fCoordinates ( p.Coordinates() ) { }

/**
Construct from a foreign 3D vector type, for example, Hep3Vector
Precondition: v must implement methods x(), y() and z()
*/
template <class ForeignVector>
explicit DisplacementVector3D( const ForeignVector & v) :
fCoordinates ( Cartesian3D<Scalar>( v.x(), v.y(), v.z() ) ) { }

#ifdef LATER
/**
construct from a generic linear algebra  vector of at least size 3
implementing operator [].
\par v  LAVector
\par index0   index where coordinates starts (typically zero)
It works for all Coordinates types,
( x= v[index0] for Cartesian and r=v[index0] for Polar )
*/
template <class LAVector>
DisplacementVector3D(const LAVector & v, size_t index0 ) {
fCoordinates = CoordSystem ( v[index0], v[index0+1], v[index0+2] );
}
#endif

// compiler-generated copy ctor and dtor are fine.

// ------ assignment ------

/**
Assignment operator from a displacement vector of arbitrary type
*/
template <class OtherCoords>
DisplacementVector3D & operator=
( const DisplacementVector3D<OtherCoords, Tag> & v) {
fCoordinates = v.Coordinates();
return *this;
}

/**
Assignment operator from a position vector
(not necessarily efficient unless one or the other is Cartesian)
*/
template <class OtherCoords>
DisplacementVector3D & operator=
( const PositionVector3D<OtherCoords,Tag> & rhs) {
SetXYZ(rhs.x(), rhs.y(), rhs.z());
return *this;
}

/**
Assignment from a foreign 3D vector type, for example, Hep3Vector
Precondition: v must implement methods x(), y() and z()
*/
template <class ForeignVector>
DisplacementVector3D & operator= ( const ForeignVector & v) {
SetXYZ( v.x(),  v.y(), v.z() );
return *this;
}

#ifdef LATER
/**
assign from a generic linear algebra  vector of at least size 3
implementing operator []. This could be also a C array
\par v  LAVector
\par index0   index where coordinates starts (typically zero)
It works for all Coordinates types,
( x= v[index0] for Cartesian and r=v[index0] for Polar )
*/
template <class LAVector>
DisplacementVector3D & assignFrom(const LAVector & v, size_t index0 = 0) {
fCoordinates = CoordSystem  ( v[index0], v[index0+1], v[index0+2] );
return *this;
}
#endif

// ------ Set, Get, and access coordinate data ------

/**
Retrieve a copy of the coordinates object
*/
CoordSystem Coordinates() const {
return fCoordinates;
}

/**
Set internal data based on a C-style array of 3 Scalar numbers
*/
DisplacementVector3D<CoordSystem, Tag>& SetCoordinates( const Scalar src[] )
{ fCoordinates.SetCoordinates(src); return *this; }

/**
Set internal data based on 3 Scalar numbers
*/
DisplacementVector3D<CoordSystem, Tag>& SetCoordinates( Scalar a, Scalar b, Scalar c )
{ fCoordinates.SetCoordinates(a, b, c); return *this; }

/**
Set internal data based on 3 Scalars at *begin to *end
*/
template <class IT>
#ifndef NDEBUG
DisplacementVector3D<CoordSystem, Tag>& SetCoordinates( IT begin, IT end  )
#else
DisplacementVector3D<CoordSystem, Tag>& SetCoordinates( IT begin, IT /* end */  )
#endif
{ IT a = begin; IT b = ++begin; IT c = ++begin;
assert (++begin==end);
SetCoordinates (*a,*b,*c);
return *this;
}

/**
get internal data into 3 Scalar numbers
*/
void GetCoordinates( Scalar& a, Scalar& b, Scalar& c ) const
{ fCoordinates.GetCoordinates(a, b, c);  }

/**
get internal data into a C-style array of 3 Scalar numbers
*/
void GetCoordinates( Scalar dest[] ) const
{ fCoordinates.GetCoordinates(dest);  }

/**
get internal data into 3 Scalars at *begin to *end (3 past begin)
*/
template <class IT>
#ifndef NDEBUG
void GetCoordinates( IT begin, IT end ) const
#else
void GetCoordinates( IT begin, IT /* end */ ) const
#endif
{ IT a = begin; IT b = ++begin; IT c = ++begin;
assert (++begin==end);
GetCoordinates (*a,*b,*c);
}
/**
get internal data into 3 Scalars starting at *begin
*/
template <class IT>
void GetCoordinates( IT begin) const {
Scalar a,b,c = 0;
GetCoordinates (a,b,c);
*begin++ = a;
*begin++ = b;
*begin = c;
}

/**
set the values of the vector from the cartesian components (x,y,z)
(if the vector is held in polar or cylindrical eta coordinates,
then (x, y, z) are converted to that form)
*/
DisplacementVector3D<CoordSystem, Tag>& SetXYZ (Scalar a, Scalar b, Scalar c) {
fCoordinates.SetXYZ(a,b,c);
return *this;
}

// ------------------- Equality -----------------

/**
Exact equality
*/
bool operator==(const DisplacementVector3D & rhs) const {
return fCoordinates==rhs.fCoordinates;
}
bool operator!= (const DisplacementVector3D & rhs) const {
return !(operator==(rhs));
}

// ------ Individual element access, in various coordinate systems ------

/**
Cartesian X, converting if necessary from internal coordinate system.
*/
Scalar X() const { return fCoordinates.X(); }

/**
Cartesian Y, converting if necessary from internal coordinate system.
*/
Scalar Y() const { return fCoordinates.Y(); }

/**
Cartesian Z, converting if necessary from internal coordinate system.
*/
Scalar Z() const { return fCoordinates.Z(); }

/**
Polar R, converting if necessary from internal coordinate system.
*/
Scalar R() const { return fCoordinates.R(); }

/**
Polar theta, converting if necessary from internal coordinate system.
*/
Scalar Theta() const { return fCoordinates.Theta(); }

/**
Polar phi, converting if necessary from internal coordinate system.
*/
Scalar Phi() const { return fCoordinates.Phi(); }

/**
Polar eta, converting if necessary from internal coordinate system.
*/
Scalar Eta() const { return fCoordinates.Eta(); }

/**
Cylindrical transverse component rho
*/
Scalar Rho() const { return fCoordinates.Rho(); }

// ----- Other fundamental properties -----

/**
Magnitute squared ( r^2 in spherical coordinate)
*/
Scalar Mag2() const { return fCoordinates.Mag2();}

/**
Transverse component squared (rho^2 in cylindrical coordinates.
*/
Scalar Perp2() const { return fCoordinates.Perp2();}

/**
return unit vector parallel to this
*/
DisplacementVector3D  Unit() const {
Scalar tot = R();
}

// ------ Setting of individual elements present in coordinate system ------

/**
Change X - Cartesian3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetX (Scalar xx) { fCoordinates.SetX(xx); return *this;}

/**
Change Y - Cartesian3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetY (Scalar yy) { fCoordinates.SetY(yy); return *this;}

/**
Change Z - Cartesian3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetZ (Scalar zz) { fCoordinates.SetZ(zz); return *this;}

/**
Change R - Polar3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetR (Scalar rr) { fCoordinates.SetR(rr); return *this;}

/**
Change Theta - Polar3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetTheta (Scalar ang) { fCoordinates.SetTheta(ang); return *this;}

/**
Change Phi - Polar3D or CylindricalEta3D coordinates
*/
DisplacementVector3D<CoordSystem, Tag>& SetPhi (Scalar ang) { fCoordinates.SetPhi(ang); return *this;}

/**
Change Rho - CylindricalEta3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetRho (Scalar rr) { fCoordinates.SetRho(rr); return *this;}

/**
Change Eta - CylindricalEta3D coordinates only
*/
DisplacementVector3D<CoordSystem, Tag>& SetEta (Scalar etaval) { fCoordinates.SetEta(etaval); return *this;}

// ------ Operations combining two vectors ------
// -- need to have the specialized version in order to avoid

/**
Return the scalar (dot) product of two displacement vectors.
It is possible to perform the product for any type of vector coordinates,
but they must have the same coordinate system tag
*/
template< class OtherCoords >
Scalar Dot( const  DisplacementVector3D<OtherCoords,Tag>  & v) const {
return X()*v.X() + Y()*v.Y() + Z()*v.Z();
}
/**
Return the scalar (dot) product of two vectors.
It is possible to perform the product for any classes
implementing x(), y() and z() member functions
*/
template< class OtherVector >
Scalar Dot( const  OtherVector & v) const {
return X()*v.x() + Y()*v.y() + Z()*v.z();
}

/**
Return vector (cross) product of two displacement vectors,
as a vector in the coordinate system of this class.
It is possible to perform the product for any type of vector coordinates,
but they must have the same coordinate system tag
*/
template <class OtherCoords>
DisplacementVector3D Cross( const DisplacementVector3D<OtherCoords,Tag>  & v) const {
DisplacementVector3D  result;
result.SetXYZ (  Y()*v.Z() - v.Y()*Z(),
Z()*v.X() - v.Z()*X(),
X()*v.Y() - v.X()*Y() );
return result;
}
/**
Return vector (cross) product of two  vectors,
as a vector in the coordinate system of this class.
It is possible to perform the product for any classes
implementing X(), Y() and Z() member functions
*/
template <class OtherVector>
DisplacementVector3D Cross( const OtherVector & v) const {
DisplacementVector3D  result;
result.SetXYZ (  Y()*v.z() - v.y()*Z(),
Z()*v.x() - v.z()*X(),
X()*v.y() - v.x()*Y() );
return result;
}

/**
Self Addition with a displacement vector.
*/
template <class OtherCoords>
DisplacementVector3D & operator+=
(const  DisplacementVector3D<OtherCoords,Tag> & v) {
SetXYZ(  X() + v.X(), Y() + v.Y(), Z() + v.Z() );
return *this;
}

/**
Self Difference with a displacement vector.
*/
template <class OtherCoords>
DisplacementVector3D & operator-=
(const  DisplacementVector3D<OtherCoords,Tag> & v) {
SetXYZ(  x() - v.x(), y() - v.y(), z() - v.z() );
return *this;
}

/**
multiply this vector by a scalar quantity
*/
DisplacementVector3D & operator*= (Scalar a) {
fCoordinates.Scale(a);
return *this;
}

/**
divide this vector by a scalar quantity
*/
DisplacementVector3D & operator/= (Scalar a) {
fCoordinates.Scale(1/a);
return *this;
}

// The following methods (v*a and v/a) could instead be free functions.
// They were moved into the class to solve a problem on AIX.

/**
Multiply a vector by a real number
*/
DisplacementVector3D operator * ( Scalar a ) const {
DisplacementVector3D tmp(*this);
tmp *= a;
return tmp;
}

/**
Negative of the vector
*/
DisplacementVector3D operator - ( ) const {
return operator*( Scalar(-1) );
}

/**
Positive of the vector, return itself
*/
DisplacementVector3D operator + ( ) const {return *this;}

/**
Division of a vector with a real number
*/
DisplacementVector3D operator/ (Scalar a) const {
DisplacementVector3D tmp(*this);
tmp /= a;
return tmp;
}

// Methods providing limited backward name compatibility with CLHEP

Scalar x()     const { return fCoordinates.X();     }
Scalar y()     const { return fCoordinates.Y();     }
Scalar z()     const { return fCoordinates.Z();     }
Scalar r()     const { return fCoordinates.R();     }
Scalar theta() const { return fCoordinates.Theta(); }
Scalar phi()   const { return fCoordinates.Phi();   }
Scalar eta()   const { return fCoordinates.Eta();   }
Scalar rho()   const { return fCoordinates.Rho();   }
Scalar mag2()  const { return fCoordinates.Mag2();  }
Scalar perp2() const { return fCoordinates.Perp2(); }
DisplacementVector3D unit() const {return Unit();}

private:

CoordSystem fCoordinates;  // internal coordinate system

#ifdef NOT_SURE_THIS_SHOULD_BE_FORBIDDEN
/**
Cross product involving a position vector is inappropriate
*/
template <class T2>
DisplacementVector3D Cross( const PositionVector3D<T2> & ) const;
#endif

// the following methods should not compile

// this should not compile (if from a vector or points with different tag
template <class OtherCoords, class OtherTag>
explicit DisplacementVector3D( const DisplacementVector3D<OtherCoords, OtherTag> & ) {}

template <class OtherCoords, class OtherTag>
explicit DisplacementVector3D( const PositionVector3D<OtherCoords, OtherTag> & ) {}

template <class OtherCoords, class OtherTag>
DisplacementVector3D & operator=( const DisplacementVector3D<OtherCoords, OtherTag> & );

template <class OtherCoords, class OtherTag>
DisplacementVector3D & operator=( const PositionVector3D<OtherCoords, OtherTag> & );

template <class OtherCoords, class OtherTag>
DisplacementVector3D & operator+=(const  DisplacementVector3D<OtherCoords, OtherTag> & );

template <class OtherCoords, class OtherTag>
DisplacementVector3D & operator-=(const  DisplacementVector3D<OtherCoords, OtherTag> & );

template<class OtherCoords, class OtherTag >
Scalar Dot( const  DisplacementVector3D<OtherCoords, OtherTag> &  ) const;

template<class OtherCoords, class OtherTag >
DisplacementVector3D Cross( const  DisplacementVector3D<OtherCoords, OtherTag> &  ) const;

};

// ---------- DisplacementVector3D class template ends here ------------
// ---------------------------------------------------------------------

/**
The (coordinate system) type of the returned vector is defined to
be identical to that of the first vector, which is passed by value
*/
template <class CoordSystem1, class CoordSystem2, class U>
inline
DisplacementVector3D<CoordSystem1,U>
operator+(       DisplacementVector3D<CoordSystem1,U> v1,
const DisplacementVector3D<CoordSystem2,U>  & v2) {
return v1 += v2;
}

/**
Difference between two DisplacementVector3D vectors.
The (coordinate system) type of the returned vector is defined to
be identical to that of the first vector.
*/
template <class CoordSystem1, class CoordSystem2, class U>
inline
DisplacementVector3D<CoordSystem1,U>
operator-( DisplacementVector3D<CoordSystem1,U> v1,
DisplacementVector3D<CoordSystem2,U> const & v2) {
return v1 -= v2;
}

//#endif // not __CINT__

/**
Multiplication of a displacement vector by real number  a*v
*/
template <class CoordSystem, class U>
inline
DisplacementVector3D<CoordSystem,U>
operator * ( typename DisplacementVector3D<CoordSystem,U>::Scalar a,
DisplacementVector3D<CoordSystem,U> v) {
return v *= a;
// Note - passing v by value and using operator *= may save one
// copy relative to passing v by const ref and creating a temporary.
}

// v1*v2 notation for Cross product of two vectors is omitted,
// since it is always confusing as to whether dot product is meant.

// ------------- I/O to/from streams -------------

template< class char_t, class traits_t, class T, class U >
inline
std::basic_ostream<char_t,traits_t> &
operator << ( std::basic_ostream<char_t,traits_t> & os
, DisplacementVector3D<T,U> const & v
)
{
if( !os )  return os;

typename T::Scalar a, b, c;
v.GetCoordinates(a, b, c);

if( detail::get_manip( os, detail::bitforbit ) )  {
detail::set_manip( os, detail::bitforbit, '\00' );
typedef GenVector_detail::BitReproducible BR;
BR::Output(os, a);
BR::Output(os, b);
BR::Output(os, c);
}
else  {
os << detail::get_manip( os, detail::open  ) << a
<< detail::get_manip( os, detail::sep   ) << b
<< detail::get_manip( os, detail::sep   ) << c
<< detail::get_manip( os, detail::close );
}

return os;

}  // op<< <>()

template< class char_t, class traits_t, class T, class U >
inline
std::basic_istream<char_t,traits_t> &
operator >> ( std::basic_istream<char_t,traits_t> & is
, DisplacementVector3D<T,U> & v
)
{
if( !is )  return is;

typename T::Scalar a, b, c;

if( detail::get_manip( is, detail::bitforbit ) )  {
detail::set_manip( is, detail::bitforbit, '\00' );
typedef GenVector_detail::BitReproducible BR;
BR::Input(is, a);
BR::Input(is, b);
BR::Input(is, c);
}
else  {
detail::require_delim( is, detail::open  );  is >> a;
detail::require_delim( is, detail::sep   );  is >> b;
detail::require_delim( is, detail::sep   );  is >> c;
detail::require_delim( is, detail::close );
}

if( is )
v.SetCoordinates(a, b, c);
return is;

}  // op>> <>()

}  // namespace Math

}  // namespace ROOT

#endif /* ROOT_Math_GenVector_DisplacementVector3D  */


DisplacementVector3D.h:1
DisplacementVector3D.h:2
DisplacementVector3D.h:3
DisplacementVector3D.h:4
DisplacementVector3D.h:5
DisplacementVector3D.h:6
DisplacementVector3D.h:7
DisplacementVector3D.h:8
DisplacementVector3D.h:9
DisplacementVector3D.h:10
DisplacementVector3D.h:11
DisplacementVector3D.h:12
DisplacementVector3D.h:13
DisplacementVector3D.h:14
DisplacementVector3D.h:15
DisplacementVector3D.h:16
DisplacementVector3D.h:17
DisplacementVector3D.h:18
DisplacementVector3D.h:19
DisplacementVector3D.h:20
DisplacementVector3D.h:21
DisplacementVector3D.h:22
DisplacementVector3D.h:23
DisplacementVector3D.h:24
DisplacementVector3D.h:25
DisplacementVector3D.h:26
DisplacementVector3D.h:27
DisplacementVector3D.h:28
DisplacementVector3D.h:29
DisplacementVector3D.h:30
DisplacementVector3D.h:31
DisplacementVector3D.h:32
DisplacementVector3D.h:33
DisplacementVector3D.h:34
DisplacementVector3D.h:35
DisplacementVector3D.h:36
DisplacementVector3D.h:37
DisplacementVector3D.h:38
DisplacementVector3D.h:39
DisplacementVector3D.h:40
DisplacementVector3D.h:41
DisplacementVector3D.h:42
DisplacementVector3D.h:43
DisplacementVector3D.h:44
DisplacementVector3D.h:45
DisplacementVector3D.h:46
DisplacementVector3D.h:47
DisplacementVector3D.h:48
DisplacementVector3D.h:49
DisplacementVector3D.h:50
DisplacementVector3D.h:51
DisplacementVector3D.h:52
DisplacementVector3D.h:53
DisplacementVector3D.h:54
DisplacementVector3D.h:55
DisplacementVector3D.h:56
DisplacementVector3D.h:57
DisplacementVector3D.h:58
DisplacementVector3D.h:59
DisplacementVector3D.h:60
DisplacementVector3D.h:61
DisplacementVector3D.h:62
DisplacementVector3D.h:63
DisplacementVector3D.h:64
DisplacementVector3D.h:65
DisplacementVector3D.h:66
DisplacementVector3D.h:67
DisplacementVector3D.h:68
DisplacementVector3D.h:69
DisplacementVector3D.h:70
DisplacementVector3D.h:71
DisplacementVector3D.h:72
DisplacementVector3D.h:73
DisplacementVector3D.h:74
DisplacementVector3D.h:75
DisplacementVector3D.h:76
DisplacementVector3D.h:77
DisplacementVector3D.h:78
DisplacementVector3D.h:79
DisplacementVector3D.h:80
DisplacementVector3D.h:81
DisplacementVector3D.h:82
DisplacementVector3D.h:83
DisplacementVector3D.h:84
DisplacementVector3D.h:85
DisplacementVector3D.h:86
DisplacementVector3D.h:87
DisplacementVector3D.h:88
DisplacementVector3D.h:89
DisplacementVector3D.h:90
DisplacementVector3D.h:91
DisplacementVector3D.h:92
DisplacementVector3D.h:93
DisplacementVector3D.h:94
DisplacementVector3D.h:95
DisplacementVector3D.h:96
DisplacementVector3D.h:97
DisplacementVector3D.h:98
DisplacementVector3D.h:99
DisplacementVector3D.h:100
DisplacementVector3D.h:101
DisplacementVector3D.h:102
DisplacementVector3D.h:103
DisplacementVector3D.h:104
DisplacementVector3D.h:105
DisplacementVector3D.h:106
DisplacementVector3D.h:107
DisplacementVector3D.h:108
DisplacementVector3D.h:109
DisplacementVector3D.h:110
DisplacementVector3D.h:111
DisplacementVector3D.h:112
DisplacementVector3D.h:113
DisplacementVector3D.h:114
DisplacementVector3D.h:115
DisplacementVector3D.h:116
DisplacementVector3D.h:117
DisplacementVector3D.h:118
DisplacementVector3D.h:119
DisplacementVector3D.h:120
DisplacementVector3D.h:121
DisplacementVector3D.h:122
DisplacementVector3D.h:123
DisplacementVector3D.h:124
DisplacementVector3D.h:125
DisplacementVector3D.h:126
DisplacementVector3D.h:127
DisplacementVector3D.h:128
DisplacementVector3D.h:129
DisplacementVector3D.h:130
DisplacementVector3D.h:131
DisplacementVector3D.h:132
DisplacementVector3D.h:133
DisplacementVector3D.h:134
DisplacementVector3D.h:135
DisplacementVector3D.h:136
DisplacementVector3D.h:137
DisplacementVector3D.h:138
DisplacementVector3D.h:139
DisplacementVector3D.h:140
DisplacementVector3D.h:141
DisplacementVector3D.h:142
DisplacementVector3D.h:143
DisplacementVector3D.h:144
DisplacementVector3D.h:145
DisplacementVector3D.h:146
DisplacementVector3D.h:147
DisplacementVector3D.h:148
DisplacementVector3D.h:149
DisplacementVector3D.h:150
DisplacementVector3D.h:151
DisplacementVector3D.h:152
DisplacementVector3D.h:153
DisplacementVector3D.h:154
DisplacementVector3D.h:155
DisplacementVector3D.h:156
DisplacementVector3D.h:157
DisplacementVector3D.h:158
DisplacementVector3D.h:159
DisplacementVector3D.h:160
DisplacementVector3D.h:161
DisplacementVector3D.h:162
DisplacementVector3D.h:163
DisplacementVector3D.h:164
DisplacementVector3D.h:165
DisplacementVector3D.h:166
DisplacementVector3D.h:167
DisplacementVector3D.h:168
DisplacementVector3D.h:169
DisplacementVector3D.h:170
DisplacementVector3D.h:171
DisplacementVector3D.h:172
DisplacementVector3D.h:173
DisplacementVector3D.h:174
DisplacementVector3D.h:175
DisplacementVector3D.h:176
DisplacementVector3D.h:177
DisplacementVector3D.h:178
DisplacementVector3D.h:179
DisplacementVector3D.h:180
DisplacementVector3D.h:181
DisplacementVector3D.h:182
DisplacementVector3D.h:183
DisplacementVector3D.h:184
DisplacementVector3D.h:185
DisplacementVector3D.h:186
DisplacementVector3D.h:187
DisplacementVector3D.h:188
DisplacementVector3D.h:189
DisplacementVector3D.h:190
DisplacementVector3D.h:191
DisplacementVector3D.h:192
DisplacementVector3D.h:193
DisplacementVector3D.h:194
DisplacementVector3D.h:195
DisplacementVector3D.h:196
DisplacementVector3D.h:197
DisplacementVector3D.h:198
DisplacementVector3D.h:199
DisplacementVector3D.h:200
DisplacementVector3D.h:201
DisplacementVector3D.h:202
DisplacementVector3D.h:203
DisplacementVector3D.h:204
DisplacementVector3D.h:205
DisplacementVector3D.h:206
DisplacementVector3D.h:207
DisplacementVector3D.h:208
DisplacementVector3D.h:209
DisplacementVector3D.h:210
DisplacementVector3D.h:211
DisplacementVector3D.h:212
DisplacementVector3D.h:213
DisplacementVector3D.h:214
DisplacementVector3D.h:215
DisplacementVector3D.h:216
DisplacementVector3D.h:217
DisplacementVector3D.h:218
DisplacementVector3D.h:219
DisplacementVector3D.h:220
DisplacementVector3D.h:221
DisplacementVector3D.h:222
DisplacementVector3D.h:223
DisplacementVector3D.h:224
DisplacementVector3D.h:225
DisplacementVector3D.h:226
DisplacementVector3D.h:227
DisplacementVector3D.h:228
DisplacementVector3D.h:229
DisplacementVector3D.h:230
DisplacementVector3D.h:231
DisplacementVector3D.h:232
DisplacementVector3D.h:233
DisplacementVector3D.h:234
DisplacementVector3D.h:235
DisplacementVector3D.h:236
DisplacementVector3D.h:237
DisplacementVector3D.h:238
DisplacementVector3D.h:239
DisplacementVector3D.h:240
DisplacementVector3D.h:241
DisplacementVector3D.h:242
DisplacementVector3D.h:243
DisplacementVector3D.h:244
DisplacementVector3D.h:245
DisplacementVector3D.h:246
DisplacementVector3D.h:247
DisplacementVector3D.h:248
DisplacementVector3D.h:249
DisplacementVector3D.h:250
DisplacementVector3D.h:251
DisplacementVector3D.h:252
DisplacementVector3D.h:253
DisplacementVector3D.h:254
DisplacementVector3D.h:255
DisplacementVector3D.h:256
DisplacementVector3D.h:257
DisplacementVector3D.h:258
DisplacementVector3D.h:259
DisplacementVector3D.h:260
DisplacementVector3D.h:261
DisplacementVector3D.h:262
DisplacementVector3D.h:263
DisplacementVector3D.h:264
DisplacementVector3D.h:265
DisplacementVector3D.h:266
DisplacementVector3D.h:267
DisplacementVector3D.h:268
DisplacementVector3D.h:269
DisplacementVector3D.h:270
DisplacementVector3D.h:271
DisplacementVector3D.h:272
DisplacementVector3D.h:273
DisplacementVector3D.h:274
DisplacementVector3D.h:275
DisplacementVector3D.h:276
DisplacementVector3D.h:277
DisplacementVector3D.h:278
DisplacementVector3D.h:279
DisplacementVector3D.h:280
DisplacementVector3D.h:281
DisplacementVector3D.h:282
DisplacementVector3D.h:283
DisplacementVector3D.h:284
DisplacementVector3D.h:285
DisplacementVector3D.h:286
DisplacementVector3D.h:287
DisplacementVector3D.h:288
DisplacementVector3D.h:289
DisplacementVector3D.h:290
DisplacementVector3D.h:291
DisplacementVector3D.h:292
DisplacementVector3D.h:293
DisplacementVector3D.h:294
DisplacementVector3D.h:295
DisplacementVector3D.h:296
DisplacementVector3D.h:297
DisplacementVector3D.h:298
DisplacementVector3D.h:299
DisplacementVector3D.h:300
DisplacementVector3D.h:301
DisplacementVector3D.h:302
DisplacementVector3D.h:303
DisplacementVector3D.h:304
DisplacementVector3D.h:305
DisplacementVector3D.h:306
DisplacementVector3D.h:307
DisplacementVector3D.h:308
DisplacementVector3D.h:309
DisplacementVector3D.h:310
DisplacementVector3D.h:311
DisplacementVector3D.h:312
DisplacementVector3D.h:313
DisplacementVector3D.h:314
DisplacementVector3D.h:315
DisplacementVector3D.h:316
DisplacementVector3D.h:317
DisplacementVector3D.h:318
DisplacementVector3D.h:319
DisplacementVector3D.h:320
DisplacementVector3D.h:321
DisplacementVector3D.h:322
DisplacementVector3D.h:323
DisplacementVector3D.h:324
DisplacementVector3D.h:325
DisplacementVector3D.h:326
DisplacementVector3D.h:327
DisplacementVector3D.h:328
DisplacementVector3D.h:329
DisplacementVector3D.h:330
DisplacementVector3D.h:331
DisplacementVector3D.h:332
DisplacementVector3D.h:333
DisplacementVector3D.h:334
DisplacementVector3D.h:335
DisplacementVector3D.h:336
DisplacementVector3D.h:337
DisplacementVector3D.h:338
DisplacementVector3D.h:339
DisplacementVector3D.h:340
DisplacementVector3D.h:341
DisplacementVector3D.h:342
DisplacementVector3D.h:343
DisplacementVector3D.h:344
DisplacementVector3D.h:345
DisplacementVector3D.h:346
DisplacementVector3D.h:347
DisplacementVector3D.h:348
DisplacementVector3D.h:349
DisplacementVector3D.h:350
DisplacementVector3D.h:351
DisplacementVector3D.h:352
DisplacementVector3D.h:353
DisplacementVector3D.h:354
DisplacementVector3D.h:355
DisplacementVector3D.h:356
DisplacementVector3D.h:357
DisplacementVector3D.h:358
DisplacementVector3D.h:359
DisplacementVector3D.h:360
DisplacementVector3D.h:361
DisplacementVector3D.h:362
DisplacementVector3D.h:363
DisplacementVector3D.h:364
DisplacementVector3D.h:365
DisplacementVector3D.h:366
DisplacementVector3D.h:367
DisplacementVector3D.h:368
DisplacementVector3D.h:369
DisplacementVector3D.h:370
DisplacementVector3D.h:371
DisplacementVector3D.h:372
DisplacementVector3D.h:373
DisplacementVector3D.h:374
DisplacementVector3D.h:375
DisplacementVector3D.h:376
DisplacementVector3D.h:377
DisplacementVector3D.h:378
DisplacementVector3D.h:379
DisplacementVector3D.h:380
DisplacementVector3D.h:381
DisplacementVector3D.h:382
DisplacementVector3D.h:383
DisplacementVector3D.h:384
DisplacementVector3D.h:385
DisplacementVector3D.h:386
DisplacementVector3D.h:387
DisplacementVector3D.h:388
DisplacementVector3D.h:389
DisplacementVector3D.h:390
DisplacementVector3D.h:391
DisplacementVector3D.h:392
DisplacementVector3D.h:393
DisplacementVector3D.h:394
DisplacementVector3D.h:395
DisplacementVector3D.h:396
DisplacementVector3D.h:397
DisplacementVector3D.h:398
DisplacementVector3D.h:399
DisplacementVector3D.h:400
DisplacementVector3D.h:401
DisplacementVector3D.h:402
DisplacementVector3D.h:403
DisplacementVector3D.h:404
DisplacementVector3D.h:405
DisplacementVector3D.h:406
DisplacementVector3D.h:407
DisplacementVector3D.h:408
DisplacementVector3D.h:409
DisplacementVector3D.h:410
DisplacementVector3D.h:411
DisplacementVector3D.h:412
DisplacementVector3D.h:413
DisplacementVector3D.h:414
DisplacementVector3D.h:415
DisplacementVector3D.h:416
DisplacementVector3D.h:417
DisplacementVector3D.h:418
DisplacementVector3D.h:419
DisplacementVector3D.h:420
DisplacementVector3D.h:421
DisplacementVector3D.h:422
DisplacementVector3D.h:423
DisplacementVector3D.h:424
DisplacementVector3D.h:425
DisplacementVector3D.h:426
DisplacementVector3D.h:427
DisplacementVector3D.h:428
DisplacementVector3D.h:429
DisplacementVector3D.h:430
DisplacementVector3D.h:431
DisplacementVector3D.h:432
DisplacementVector3D.h:433
DisplacementVector3D.h:434
DisplacementVector3D.h:435
DisplacementVector3D.h:436
DisplacementVector3D.h:437
DisplacementVector3D.h:438
DisplacementVector3D.h:439
DisplacementVector3D.h:440
DisplacementVector3D.h:441
DisplacementVector3D.h:442
DisplacementVector3D.h:443
DisplacementVector3D.h:444
DisplacementVector3D.h:445
DisplacementVector3D.h:446
DisplacementVector3D.h:447
DisplacementVector3D.h:448
DisplacementVector3D.h:449
DisplacementVector3D.h:450
DisplacementVector3D.h:451
DisplacementVector3D.h:452
DisplacementVector3D.h:453
DisplacementVector3D.h:454
DisplacementVector3D.h:455
DisplacementVector3D.h:456
DisplacementVector3D.h:457
DisplacementVector3D.h:458
DisplacementVector3D.h:459
DisplacementVector3D.h:460
DisplacementVector3D.h:461
DisplacementVector3D.h:462
DisplacementVector3D.h:463
DisplacementVector3D.h:464
DisplacementVector3D.h:465
DisplacementVector3D.h:466
DisplacementVector3D.h:467
DisplacementVector3D.h:468
DisplacementVector3D.h:469
DisplacementVector3D.h:470
DisplacementVector3D.h:471
DisplacementVector3D.h:472
DisplacementVector3D.h:473
DisplacementVector3D.h:474
DisplacementVector3D.h:475
DisplacementVector3D.h:476
DisplacementVector3D.h:477
DisplacementVector3D.h:478
DisplacementVector3D.h:479
DisplacementVector3D.h:480
DisplacementVector3D.h:481
DisplacementVector3D.h:482
DisplacementVector3D.h:483
DisplacementVector3D.h:484
DisplacementVector3D.h:485
DisplacementVector3D.h:486
DisplacementVector3D.h:487
DisplacementVector3D.h:488
DisplacementVector3D.h:489
DisplacementVector3D.h:490
DisplacementVector3D.h:491
DisplacementVector3D.h:492
DisplacementVector3D.h:493
DisplacementVector3D.h:494
DisplacementVector3D.h:495
DisplacementVector3D.h:496
DisplacementVector3D.h:497
DisplacementVector3D.h:498
DisplacementVector3D.h:499
DisplacementVector3D.h:500
DisplacementVector3D.h:501
DisplacementVector3D.h:502
DisplacementVector3D.h:503
DisplacementVector3D.h:504
DisplacementVector3D.h:505
DisplacementVector3D.h:506
DisplacementVector3D.h:507
DisplacementVector3D.h:508
DisplacementVector3D.h:509
DisplacementVector3D.h:510
DisplacementVector3D.h:511
DisplacementVector3D.h:512
DisplacementVector3D.h:513
DisplacementVector3D.h:514
DisplacementVector3D.h:515
DisplacementVector3D.h:516
DisplacementVector3D.h:517
DisplacementVector3D.h:518
DisplacementVector3D.h:519
DisplacementVector3D.h:520
DisplacementVector3D.h:521
DisplacementVector3D.h:522
DisplacementVector3D.h:523
DisplacementVector3D.h:524
DisplacementVector3D.h:525
DisplacementVector3D.h:526
DisplacementVector3D.h:527
DisplacementVector3D.h:528
DisplacementVector3D.h:529
DisplacementVector3D.h:530
DisplacementVector3D.h:531
DisplacementVector3D.h:532
DisplacementVector3D.h:533
DisplacementVector3D.h:534
DisplacementVector3D.h:535
DisplacementVector3D.h:536
DisplacementVector3D.h:537
DisplacementVector3D.h:538
DisplacementVector3D.h:539
DisplacementVector3D.h:540
DisplacementVector3D.h:541
DisplacementVector3D.h:542
DisplacementVector3D.h:543
DisplacementVector3D.h:544
DisplacementVector3D.h:545
DisplacementVector3D.h:546
DisplacementVector3D.h:547
DisplacementVector3D.h:548
DisplacementVector3D.h:549
DisplacementVector3D.h:550
DisplacementVector3D.h:551
DisplacementVector3D.h:552
DisplacementVector3D.h:553
DisplacementVector3D.h:554
DisplacementVector3D.h:555
DisplacementVector3D.h:556
DisplacementVector3D.h:557
DisplacementVector3D.h:558
DisplacementVector3D.h:559
DisplacementVector3D.h:560
DisplacementVector3D.h:561
DisplacementVector3D.h:562
DisplacementVector3D.h:563
DisplacementVector3D.h:564
DisplacementVector3D.h:565
DisplacementVector3D.h:566
DisplacementVector3D.h:567
DisplacementVector3D.h:568
DisplacementVector3D.h:569
DisplacementVector3D.h:570
DisplacementVector3D.h:571
DisplacementVector3D.h:572
DisplacementVector3D.h:573
DisplacementVector3D.h:574
DisplacementVector3D.h:575
DisplacementVector3D.h:576
DisplacementVector3D.h:577
DisplacementVector3D.h:578
DisplacementVector3D.h:579
DisplacementVector3D.h:580
DisplacementVector3D.h:581
DisplacementVector3D.h:582
DisplacementVector3D.h:583
DisplacementVector3D.h:584
DisplacementVector3D.h:585
DisplacementVector3D.h:586
DisplacementVector3D.h:587
DisplacementVector3D.h:588
DisplacementVector3D.h:589
DisplacementVector3D.h:590
DisplacementVector3D.h:591
DisplacementVector3D.h:592
DisplacementVector3D.h:593
DisplacementVector3D.h:594
DisplacementVector3D.h:595
DisplacementVector3D.h:596
DisplacementVector3D.h:597
DisplacementVector3D.h:598
DisplacementVector3D.h:599
DisplacementVector3D.h:600
DisplacementVector3D.h:601
DisplacementVector3D.h:602
DisplacementVector3D.h:603
DisplacementVector3D.h:604
DisplacementVector3D.h:605
DisplacementVector3D.h:606
DisplacementVector3D.h:607
DisplacementVector3D.h:608
DisplacementVector3D.h:609
DisplacementVector3D.h:610
DisplacementVector3D.h:611
DisplacementVector3D.h:612
DisplacementVector3D.h:613
DisplacementVector3D.h:614
DisplacementVector3D.h:615
DisplacementVector3D.h:616
DisplacementVector3D.h:617
DisplacementVector3D.h:618
DisplacementVector3D.h:619
DisplacementVector3D.h:620
DisplacementVector3D.h:621
DisplacementVector3D.h:622
DisplacementVector3D.h:623
DisplacementVector3D.h:624
DisplacementVector3D.h:625
DisplacementVector3D.h:626
DisplacementVector3D.h:627
DisplacementVector3D.h:628
DisplacementVector3D.h:629
DisplacementVector3D.h:630
DisplacementVector3D.h:631
DisplacementVector3D.h:632
DisplacementVector3D.h:633
DisplacementVector3D.h:634
DisplacementVector3D.h:635
DisplacementVector3D.h:636
DisplacementVector3D.h:637
DisplacementVector3D.h:638
DisplacementVector3D.h:639
DisplacementVector3D.h:640
DisplacementVector3D.h:641
DisplacementVector3D.h:642
DisplacementVector3D.h:643
DisplacementVector3D.h:644
DisplacementVector3D.h:645
DisplacementVector3D.h:646
DisplacementVector3D.h:647
DisplacementVector3D.h:648
DisplacementVector3D.h:649
DisplacementVector3D.h:650
DisplacementVector3D.h:651
DisplacementVector3D.h:652
DisplacementVector3D.h:653
DisplacementVector3D.h:654
DisplacementVector3D.h:655
DisplacementVector3D.h:656
DisplacementVector3D.h:657
DisplacementVector3D.h:658
DisplacementVector3D.h:659
DisplacementVector3D.h:660
DisplacementVector3D.h:661
DisplacementVector3D.h:662
DisplacementVector3D.h:663
DisplacementVector3D.h:664
DisplacementVector3D.h:665
DisplacementVector3D.h:666
DisplacementVector3D.h:667
DisplacementVector3D.h:668
DisplacementVector3D.h:669
DisplacementVector3D.h:670
DisplacementVector3D.h:671
DisplacementVector3D.h:672
DisplacementVector3D.h:673
DisplacementVector3D.h:674
DisplacementVector3D.h:675
DisplacementVector3D.h:676
DisplacementVector3D.h:677
DisplacementVector3D.h:678
DisplacementVector3D.h:679
DisplacementVector3D.h:680
DisplacementVector3D.h:681
DisplacementVector3D.h:682
DisplacementVector3D.h:683
DisplacementVector3D.h:684
DisplacementVector3D.h:685
DisplacementVector3D.h:686
DisplacementVector3D.h:687
DisplacementVector3D.h:688
DisplacementVector3D.h:689
DisplacementVector3D.h:690
DisplacementVector3D.h:691
DisplacementVector3D.h:692
DisplacementVector3D.h:693
DisplacementVector3D.h:694
DisplacementVector3D.h:695
DisplacementVector3D.h:696
DisplacementVector3D.h:697
DisplacementVector3D.h:698
DisplacementVector3D.h:699
DisplacementVector3D.h:700