Changeset 565 in Sophya for trunk/SophyaLib/Samba/vector3d.cc


Ignore:
Timestamp:
Nov 10, 1999, 3:01:46 PM (26 years ago)
Author:
ansari
Message:

ajout doc GLM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/Samba/vector3d.cc

    r264 r565  
    22#include "vector3d.h"
    33#include "utilgeom.h"
    4 
    5 Vector3d::Vector3d()
     4//++
     5// Class        Vector3d
     6//
     7// include      vector3d.h utilgeom.h  longlat.h math.h
     8//
     9//
     10//    3-D geometry.
     11//    All computations are made with angles in radians and with spherical
     12//    coordinates theta, phi.
     13//
     14//    Concerning Euler's angles, the reference is :
     15//
     16//    "Classical Mechanics" 2nd edition, H. Goldstein, Addison Wesley
     17//--
     18//++
     19// Titre        Constructors
     20//--
     21//++
     22Vector3d::Vector3d()
     23//
     24//--
    625{
    726  Setxyz(1.,0.,0.);
    827}
    9 
     28//++
    1029Vector3d::Vector3d(double x, double y, double z)
     30//
     31//--
    1132{
    1233  _x=x;
     
    1536  xyz2ThetaPhi();
    1637}
    17 
     38//++
    1839Vector3d::Vector3d(double theta, double phi)
     40//
     41//--
    1942{
    2043  _theta=mod(theta,M_PI); // dans [0;pi]
     
    2245  ThetaPhi2xyz();
    2346}
    24 
     47//++
    2548Vector3d::Vector3d(const LongLat& ll)
     49//
     50//--
    2651{
    2752  _theta=ll.Theta(); // dans [0;pi]
     
    2954  ThetaPhi2xyz();
    3055}
    31 
     56//++
    3257Vector3d::Vector3d(const Vector3d& v)
     58//
     59//--
    3360{
    3461  _x=v._x;
     
    3865  _phi=v._phi;
    3966}
    40 
    41 void Vector3d::SetThetaPhi(double theta, double phi)
     67//++
     68// Titre        Public methods
     69//--
     70//++
     71void Vector3d::SetThetaPhi(double theta, double phi)
     72//
     73//--
    4274{
    4375  _theta=mod(theta,M_PI);
     
    4577  ThetaPhi2xyz();
    4678}
    47 
     79//++
    4880void Vector3d::Setxyz(double x, double y, double z)
     81//
     82//--
    4983{
    5084  _x=x;
     
    5387  xyz2ThetaPhi();
    5488}
    55 
     89//++
    5690void Vector3d::ThetaPhi2xyz()
     91//
     92//--
    5793{
    5894  _x=sin(_theta)*cos(_phi);
     
    6096  _z=cos(_theta);
    6197}
    62 
     98//++
    6399void Vector3d::xyz2ThetaPhi()
     100//
     101//--
    64102{
    65103  double norm=this->Norm();
     
    77115    }
    78116}
    79 
     117//++
    80118Vector3d& Vector3d::Normalize()
     119//
     120//--
    81121{
    82122  double norm=this->Norm();
     
    85125  return *this;
    86126}
    87 
     127//++
    88128double Vector3d::Norm() const
     129//
     130//--
    89131{
    90132  return sqrt(_x*_x+_y*_y+_z*_z);
    91133}
    92 
     134//++
    93135double Vector3d::Psc(const Vector3d& v) const
     136//
     137//    dot product
     138//--
    94139{
    95140  return _x*v._x+_y*v._y+_z*v._z;
    96141}
    97 
     142//++
    98143double Vector3d::SepAngle(const Vector3d& v) const
     144//
     145//    angular gap between 2 vectors in [0,Pi]
     146//--
    99147{
    100148  double n1=this->Norm();
     
    109157  return ret;
    110158}
    111 
     159//++
    112160Vector3d Vector3d::Vect(const Vector3d& v) const
     161//
     162//    vector product
     163//--
    113164{
    114165  double xo=_y*v._z-_z*v._y;
     
    117168  return Vector3d(xo,yo,zo);
    118169}
    119 
    120 Vector3d Vector3d::VperpPhi() const // vecteur perpendiculaire de meme phi
     170//++
     171Vector3d Vector3d::VperpPhi() const
     172//
     173//    perpendicular vector, with equal phi
     174//--
    121175{
    122176  double theta;
     
    125179  return Vector3d(theta,_phi);
    126180}
    127 
    128 Vector3d Vector3d::VperpTheta() const // vecteur perpendiculaire de meme theta
     181//++
     182Vector3d Vector3d::VperpTheta() const
     183//
     184//    perpendicular vector with equal theta
     185//--
    129186{
    130187  double phi=mod(_phi+pi_over_2,pi2); // on tourne phi de pi/2
     
    147204  return temp;
    148205}
    149 
     206//++
    150207Vector3d Vector3d::ETheta() const
     208//
     209//--
    151210{
    152211  Vector3d temp=this->Vect(EPhi());
     
    155214}
    156215
    157 
     216//++
    158217Vector3d Vector3d::Euler(double phi, double theta, double psi) const
     218//
     219//    Euler's rotations
     220//--
    159221{
    160222  double cpsi=cos(psi);
     
    173235  return Vector3d(xnew,ynew,znew);
    174236}
    175 
     237//++
    176238Vector3d Vector3d::InvEuler(double phi, double theta, double psi) const
     239//
     240//    inverse rotation
     241//--
    177242{
    178243  double cpsi=cos(psi);
     
    191256  return Vector3d(xnew,ynew,znew);
    192257}
    193 
     258//++
    194259Vector3d Vector3d::Rotate(const Vector3d& omega, double phi)
     260//
     261//    rotation of angle phi around an axis omega (Maxwell's rule)
     262//--
    195263{
    196264  Vector3d rotationaxis=omega;
     
    200268  Vector3d rotate=n*rotationaxis+(myself-n*rotationaxis)*cos(phi)-(myself^rotationaxis)*sin(phi);
    201269  return rotate;
    202 }   
    203 
    204 Vector3d& Vector3d::operator+=(const Vector3d& v)
     270}
     271//++ 
     272void Vector3d::Print(ostream& os) const
     273//
     274//--
     275{
     276  os << "Vector3: (X,Y,Z)= (" << _x << ", " << _y << ", " << _z
     277     << ") --- Theta,Phi= " << _theta << ", " << _phi << "\n"
     278     << "Norme = " << this->Norm() << endl;
     279}
     280//++
     281// Titre        Operators
     282//--
     283//++
     284Vector3d& Vector3d::operator += (const Vector3d& v)
     285//
     286//--
    205287{
    206288  *this=*this+v;
    207289  return *this;
    208290}
    209 
    210 Vector3d& Vector3d::operator-=(const Vector3d& v)
     291//++
     292Vector3d& Vector3d::operator -= (const Vector3d& v)
     293//
     294//--
    211295{
    212296  *this=*this-v;
    213297  return *this;
    214298}
    215 
    216 Vector3d& Vector3d::operator+=(double d)
     299//++
     300Vector3d& Vector3d::operator += (double d)
     301//
     302//--
    217303{
    218304  Setxyz(_x+d,_y+d,_z+d);
    219305  return *this;
    220306}
    221 
    222 Vector3d& Vector3d::operator/=(double d)
     307//++
     308Vector3d& Vector3d::operator /= (double d)
     309//
     310//--
    223311{
    224312  if( d != 0. ) Setxyz(_x/d,_y/d,_z/d);
     
    226314  return *this;
    227315}
    228 
    229 Vector3d& Vector3d::operator*=(double d)
     316//++
     317Vector3d& Vector3d::operator *= (double d)
     318//
     319//--
    230320{
    231321  Setxyz(_x*d,_y*d,_z*d);
    232322  return *this;
    233323}
    234 
    235 Vector3d Vector3d::operator^(const Vector3d& v) const
     324//++
     325Vector3d Vector3d::operator ^ (const Vector3d& v) const
     326//
     327//    vector product
     328//--
    236329{
    237330  return this->Vect(v);
    238331}
    239 
    240 Vector3d Vector3d::operator+(double d) const
     332//++
     333Vector3d Vector3d::operator + (double d) const
     334//
     335//--
    241336{
    242337  return Vector3d(_x+d,_y+d,_z+d);
    243338}
    244 
    245 Vector3d Vector3d::operator+(const Vector3d& v) const
     339//++
     340Vector3d Vector3d::operator + (const Vector3d& v) const
     341//
     342//--
    246343{
    247344  return Vector3d(_x+v._x,_y+v._y,_z+v._z);
    248345}
    249 
    250 Vector3d Vector3d::operator-(double d) const
     346//++
     347Vector3d Vector3d::operator - (double d) const
     348//
     349//--
    251350{
    252351  return *this+(-d);
    253352}
    254 
    255 Vector3d Vector3d::operator-(const Vector3d& v) const
     353//++
     354Vector3d Vector3d::operator - (const Vector3d& v) const
     355//
     356//--
    256357{
    257358  return *this+(v*(-1.));
    258359}
    259 
    260 Vector3d Vector3d::operator*(double d) const
     360//++
     361Vector3d Vector3d::operator * (double d) const
     362//
     363//--
    261364{
    262365  return Vector3d(d*_x,d*_y,d*_z);
    263366}
    264 
    265 double Vector3d::operator*(const Vector3d& v) const
     367//++
     368double Vector3d::operator * (const Vector3d& v) const
     369//
     370//    dot product
     371//--
    266372{
    267373  return this->Psc(v);
    268374}
    269 
    270 Vector3d Vector3d::operator/(double d) const
     375//++
     376Vector3d Vector3d::operator / (double d) const
     377//
     378//--
    271379{
    272380  Vector3d ret=*this;
     
    275383  return ret;
    276384}
    277 
    278 Vector3d& Vector3d::operator=(const Vector3d& v)
     385//++
     386Vector3d& Vector3d::operator = (const Vector3d& v)
     387//
     388//--
    279389{
    280390  if( this != &v )
     
    288398  return *this;
    289399}
     400//++
     401bool Vector3d::operator == (const Vector3d& v)
     402//
     403//--
     404{
     405  return (this==&v);
     406}
    290407
    291 bool Vector3d::operator==(const Vector3d& v)
    292 {
    293   return (this==&v);
    294 }
    295 
    296 void Vector3d::Print(ostream& os) const
    297 {
    298   os << "Vector3: (X,Y,Z)= (" << _x << ", " << _y << ", " << _z
    299      << ") --- Theta,Phi= " << _theta << ", " << _phi << "\n"
    300      << "Norme = " << this->Norm() << endl;
    301 }
Note: See TracChangeset for help on using the changeset viewer.