Changeset 1770 in Sophya for trunk/SophyaLib/Samba


Ignore:
Timestamp:
Nov 16, 2001, 10:12:04 AM (24 years ago)
Author:
lemeur
Message:

mises a jour pour ELDESTINO

Location:
trunk/SophyaLib/Samba
Files:
3 added
2 edited

Legend:

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

    r1758 r1770  
    124124}
    125125
    126 //++
    127 bool Circle::Intersection(const Circle& c, double* psi) const
    128 //
    129 //    psi contains  4 values of the intersection  angles.
    130 //    -1 if  circles do not intersect
    131 //    psi[0]=psi(i,j,0)
    132 //    psi[1]=psi(i,j,1)
    133 //    psi[2]=psi(j,i,0)
    134 //    psi[3]=psi(j,i,1)
    135 //--
    136 {
    137   double alphak=_angouv;
    138   double alphal=c._angouv;
    139   Vector3d ok=_spinaxis;
    140   Vector3d ol=c._spinaxis;
    141   double gamma=ok.SepAngle(ol);
    142 
    143   if( fabs(alphak-alphal) < gamma && gamma <= (alphak+alphal) && this != &c )
    144     {
    145       // then the 2 circles intersect
    146       double sg=sin(gamma),cg=cos(gamma);
    147       double sak=sin(alphak),cak=cos(alphak);
    148       double sal=sin(alphal),cal=cos(alphal);
    149       double st=sin(_theta),ct=cos(_theta);
    150       double stc=sin(c._theta),ctc=cos(c._theta);
    151       double dphi=_phi-c._phi;
    152       double sdphi=sin(dphi),cdphi=cos(dphi);
    153       double sinusk=stc*sdphi/sg,cosinusk=(ctc*st-stc*ct*cdphi)/sg;
    154       double sinusl=-st*sdphi/sg,cosinusl=(ct*stc-st*ctc*cdphi)/sg;
    155       double gammaik=scangle(sinusk,cosinusk);
    156       double gammail=scangle(sinusl,cosinusl);
    157       double omegak=acos((cal-cak*cg)/sg/sak);
    158       double omegal=acos((cak-cal*cg)/sg/sal);
    159       psi[0]=fmod(gammaik-omegak+pi2,pi2);
    160       psi[1]=fmod(gammaik+omegak+pi2,pi2);
    161       psi[2]=fmod(gammail-omegal+pi2,pi2);
    162       psi[3]=fmod(gammail+omegal+pi2,pi2);
    163       if( psi[0] > psi[1] )
    164         {
    165           // psi[0]=psi(i,j,0)
    166           // psi[1]=psi(i,j,1)
    167           // psi[2]=psi(j,i,0)
    168           // psi[3]=psi(j,i,1)
    169           swap(psi[0],psi[1]);
    170           swap(psi[2],psi[3]);
    171         }                     
    172       return true;
    173     }
    174   else
    175     {
    176       psi[0] = -1.;
    177       psi[1] = -1.;
    178       psi[2] = -1.;
    179       psi[3] = -1.;
    180       return false;
    181     }
    182 }
    183126//++
    184127UnitVector Circle::ConvToSphere(double psi) const
     
    305248}
    306249//
    307 bool Circle::intersection(const Circle* c) const
     250bool Circle::Intersection(const Circle& c) const
    308251{
    309252  double alphak= _angouv;
    310   double alphal= c->_angouv;
     253  double alphal= c._angouv;
    311254  Vector3d ok= _spinaxis;
    312   Vector3d ol= c->_spinaxis;
     255  Vector3d ol= c._spinaxis;
    313256  double gamma= ok.SepAngle(ol);
    314257
    315   if(fabs(alphak-alphal) < gamma && gamma <= (alphak+alphal) && this != c) {
     258  if(fabs(alphak-alphal) < gamma && gamma <= (alphak+alphal) && this != &c) {
    316259    return true;
    317260  } else {
     
    320263}
    321264//
    322 bool Circle::intersection(const Circle& c, double* psi) const
     265bool Circle::Intersection(const Circle& c, double* psi) const
    323266{
    324267  double alphak= _angouv;
  • trunk/SophyaLib/Samba/circle.h

    r1758 r1770  
    4343    psi[3]=psi(j,i,1)
    4444  */
    45   bool Intersection(const Circle&, double* psi) const;
    46   bool intersection(const Circle&, double*) const;
    47   bool intersection(const Circle*) const;
     45
     46  bool Intersection(const Circle&, double*) const;
     47  bool Intersection(const Circle&) const;
    4848
    4949  // donne le UnitVector correspondant a une position donnee sur le cercle
Note: See TracChangeset for help on using the changeset viewer.