Changeset 1770 in Sophya
- Timestamp:
- Nov 16, 2001, 10:12:04 AM (24 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Samba/circle.cc
r1758 r1770 124 124 } 125 125 126 //++127 bool Circle::Intersection(const Circle& c, double* psi) const128 //129 // psi contains 4 values of the intersection angles.130 // -1 if circles do not intersect131 // 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 intersect146 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 else175 {176 psi[0] = -1.;177 psi[1] = -1.;178 psi[2] = -1.;179 psi[3] = -1.;180 return false;181 }182 }183 126 //++ 184 127 UnitVector Circle::ConvToSphere(double psi) const … … 305 248 } 306 249 // 307 bool Circle:: intersection(const Circle*c) const250 bool Circle::Intersection(const Circle& c) const 308 251 { 309 252 double alphak= _angouv; 310 double alphal= c ->_angouv;253 double alphal= c._angouv; 311 254 Vector3d ok= _spinaxis; 312 Vector3d ol= c ->_spinaxis;255 Vector3d ol= c._spinaxis; 313 256 double gamma= ok.SepAngle(ol); 314 257 315 if(fabs(alphak-alphal) < gamma && gamma <= (alphak+alphal) && this != c) {258 if(fabs(alphak-alphal) < gamma && gamma <= (alphak+alphal) && this != &c) { 316 259 return true; 317 260 } else { … … 320 263 } 321 264 // 322 bool Circle:: intersection(const Circle& c, double* psi) const265 bool Circle::Intersection(const Circle& c, double* psi) const 323 266 { 324 267 double alphak= _angouv; -
trunk/SophyaLib/Samba/circle.h
r1758 r1770 43 43 psi[3]=psi(j,i,1) 44 44 */ 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; 48 48 49 49 // donne le UnitVector correspondant a une position donnee sur le cercle
Note:
See TracChangeset
for help on using the changeset viewer.