source: Sophya/trunk/SophyaLib/Samba/circle.h@ 3739

Last change on this file since 3739 was 2322, checked in by cmv, 23 years ago
  • passage xxstream.h en xxstream
  • compile avec gcc_3.2, gcc_2.96 et cxx En 3.2 le seek from ::end semble marcher (voir Eval/COS/pbseekios.cc)

rz+cmv 11/2/2003

File size: 3.0 KB
RevLine 
[1371]1// Geometry handling class
2// R. Ansari , G. Le Meur 2000
3// DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay)
4
[262]5#ifndef CIRCLE_H_SEEN
6#define CIRCLE_H_SEEN
7
8#include <math.h>
[2322]9#include <iostream>
[262]10#include "vector3d.h"
11#include "unitvector.h"
12#include "utilgeom.h"
[470]13#include "geometry.h"
[262]14
[1371]15namespace SOPHYA {
16
[470]17class Circle : public Geometry
[262]18{
19
20 public:
21
22 Circle();
23 Circle(double theta, double phi, double aperture);
24 Circle(double x, double y, double z, double aperture);
25 Circle(const Vector3d& v, double aperture=M_PI/2.);
26 Circle(const Circle& c);
27 virtual ~Circle() {}
28
29 void SetCircle(const UnitVector&, double);
30 void SetSpinAxis(double theta, double phi);
31 void SetSpinAxis(const Vector3d&);
32 void SetSpinAxis(double x, double y, double z);
33 void SetApertureAngle(double aperture);
34 void SetApertureAngle(const Circle&);
35
[470]36 // psi contient les 4 valeurs des angles d intersection. -1 si les cercles ne se coupent pas
[262]37 // voir la numerotation dans le .cc
[568]38 /* psi contains 4 values of the intersection angles.
39 -1 if circles do not intersect
40 psi[0]=psi(i,j,0)
41 psi[1]=psi(i,j,1)
42 psi[2]=psi(j,i,0)
43 psi[3]=psi(j,i,1)
44 */
[262]45
[1770]46 bool Intersection(const Circle&, double*) const;
47 bool Intersection(const Circle&) const;
48
[262]49 // donne le UnitVector correspondant a une position donnee sur le cercle
[568]50 /*! Return UnitVector corresponding to a given position donnee on the circle
51 */
[470]52 UnitVector ConvToSphere(double psi) const;
[262]53
54 // donne le UnitVector correspondant la tangente au cercle en une position donnee sur le cercle
[568]55 /*! Return UnitVector corresponding to the tangent to the circle */
56// at given position on the circle.
[262]57 UnitVector TanOnCircle(double psi) const;
58
59 // donne le vecteur tangent dans le plan (xy) a la sphere en une position donnee sur le cercle
[568]60 /*! Return the vector tangent to the sphere in the plane (xy)
61 at a given position on the circle.
62 */
[262]63 UnitVector EPhi(double psi) const;
64
[470]65 // donne l autre vecteur tangent (orthogonal a EPhi)
[568]66 /*! Return the other tangent vector( orthogonal to EPhi)--
67 see previous method
68 */
[262]69 UnitVector ETheta(double psi) const;
70
[470]71 // donne l angle de separation dans [0,2Pi] en une position donnee sur le cercle et EPhi
[568]72 /*! Return separation angle in [0,2Pi] at a given position on the
73 circle and EPhi
74 */
[262]75 double SepAngleTanEPhi02PI(double psi) const;
76
77 double Theta() const {return _spinaxis.Theta();}
78 double Phi() const {return _spinaxis.Phi();}
79 double ApertureAngle() const {return _angouv;}
80 Vector3d Omega() const {return _spinaxis;}
81 virtual void Print(ostream&) const;
82 Circle& operator=(const Circle&);
83 bool operator==(const Circle&) const;
84 bool operator!=(const Circle&) const;
85
86 private:
87
88 Vector3d _spinaxis;
89 UnitVector _spinunitaxis;
90 double _angouv;
91 double _theta,_phi;
92 double _x,_y,_z;
93
[1758]94 double _cangouv;
95 double _sangouv;
96 double _ctheta;
97 double _stheta;
98 double _cphi;
99 double _sphi;
[262]100};
101
102inline ostream& operator<<(ostream& s, const Circle& c)
103{
104 c.Print(s);
105 return s;
106}
107
[1371]108} // namespace SOPHYA
109
[262]110#endif
Note: See TracBrowser for help on using the repository browser.