UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
p_straight_elements.H
1 /* p_straight_elements.H */
2 /* $Id: p_straight_elements.H,v 1.6 2001/05/07 17:12:10 hoh Exp $ */
3 #ifndef __p_straight_elements_H
4 #define __p_straight_elements_H
5 
6 #include <mod3d/mod3d_raytrace.H>
7 #include "rays_straight.H"
8 
10 protected:
11  // Обработанные и еще не обработанные лучи rays arProcessedRays; rays arNewRays; // Соответствующие /\ пересечения на входе в тело IntAr aiProcessedCrossings; IntAr aiNewCrossings; void addh_ray (ray *pRNew,int iCN); public: pl_straight_body(geophys_params gp):pl_intern_body(gp){}; pl_straight_body(any_borders &ab,geophys_params gp); ~pl_straight_body(){arProcessedRays.clean();arNewRays.clean();}; void commit_pass (); const IntAr& get_all_crossings ()const; const rays& get_all_rays ()const; // Этот массив, к сожалению, иногда нужно исправлять... IntAr& get_new_crossings (); const rays &get_new_rays ()const; Logic store_ray (ray* pRNew,int iBorder); void clear_rays(){arNewRays.clean(); arProcessedRays.clean();}; Logic reflecting_border(int iB)const; }; typedef pl_straight_body* p_pl_straight_body; typedef ObjectsAr<p_pl_straight_body> pl_straight_bodies; // Прохождение по пути, заданному шаблоном class border_hit_info:public hit_point_info{ protected: rays_straight * pr; IntAr iaTemplate; int iReflectBorder; int iHitBorder; int iBody; Logic verify_ray (ray*r)const; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); border_hit_info(rays_straight*,int,int, ray*prToPass,int, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D, double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D); border_hit_info(rays_straight*,ray*,int,int, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D, double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D); int get_ref_bord_num(); int get_hit_bord_num(); }; // Прохождение по пути, заданному шаблоном, строго дальше, нежели этот шаблон class hit_through_border_info:public general_hit_info{ protected: rays_straight * pr; ray * prTemplate; int iReflectBorder; geophys_params gp; raytr_params rp; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); virtual void get_ray_parameters (const point3d &pWhere,const crossing&c,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); virtual void get_ray_parameters(const point3d &pWhere,const ray* rLast,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); hit_through_border_info(rays_straight *,ray *, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i3=PM_MAX_ITERATIONS_COUNT_D, double d2=PM_ALPHA_STOP_D/10., int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D); }; #endif /* p_straight_elements.H */ /* Melnikov George Yu. 2-Feb-2000 */ /* ... */
12  rays arProcessedRays;
13  rays arNewRays;
14 
15  // Соответствующие /\ пересечения на входе в тело IntAr aiProcessedCrossings; IntAr aiNewCrossings; void addh_ray (ray *pRNew,int iCN); public: pl_straight_body(geophys_params gp):pl_intern_body(gp){}; pl_straight_body(any_borders &ab,geophys_params gp); ~pl_straight_body(){arProcessedRays.clean();arNewRays.clean();}; void commit_pass (); const IntAr& get_all_crossings ()const; const rays& get_all_rays ()const; // Этот массив, к сожалению, иногда нужно исправлять... IntAr& get_new_crossings (); const rays &get_new_rays ()const; Logic store_ray (ray* pRNew,int iBorder); void clear_rays(){arNewRays.clean(); arProcessedRays.clean();}; Logic reflecting_border(int iB)const; }; typedef pl_straight_body* p_pl_straight_body; typedef ObjectsAr<p_pl_straight_body> pl_straight_bodies; // Прохождение по пути, заданному шаблоном class border_hit_info:public hit_point_info{ protected: rays_straight * pr; IntAr iaTemplate; int iReflectBorder; int iHitBorder; int iBody; Logic verify_ray (ray*r)const; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); border_hit_info(rays_straight*,int,int, ray*prToPass,int, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D, double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D); border_hit_info(rays_straight*,ray*,int,int, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D, double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D); int get_ref_bord_num(); int get_hit_bord_num(); }; // Прохождение по пути, заданному шаблоном, строго дальше, нежели этот шаблон class hit_through_border_info:public general_hit_info{ protected: rays_straight * pr; ray * prTemplate; int iReflectBorder; geophys_params gp; raytr_params rp; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); virtual void get_ray_parameters (const point3d &pWhere,const crossing&c,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); virtual void get_ray_parameters(const point3d &pWhere,const ray* rLast,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); hit_through_border_info(rays_straight *,ray *, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i3=PM_MAX_ITERATIONS_COUNT_D, double d2=PM_ALPHA_STOP_D/10., int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D); }; #endif /* p_straight_elements.H */ /* Melnikov George Yu. 2-Feb-2000 */ /* ... */
16  IntAr aiProcessedCrossings;
17  IntAr aiNewCrossings;
18 
19  void addh_ray (ray *pRNew,int iCN);
20 public:
23  ~pl_straight_body(){arProcessedRays.clean();arNewRays.clean();};
24  void commit_pass ();
25  const IntAr& get_all_crossings ()const;
26  const rays& get_all_rays ()const;
27  // Этот массив, к сожалению, иногда нужно исправлять...
28  IntAr& get_new_crossings ();
29  const rays &get_new_rays ()const;
30  Logic store_ray (ray* pRNew,int iBorder);
31  void clear_rays(){arNewRays.clean(); arProcessedRays.clean();};
32  Logic reflecting_border(int iB)const;
33 };
34 
37 
38 
39 
40 
41 // Прохождение по пути, заданному шаблономclass border_hit_info:public hit_point_info{ protected: rays_straight * pr; IntAr iaTemplate; int iReflectBorder; int iHitBorder; int iBody; Logic verify_ray (ray*r)const; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); border_hit_info(rays_straight*,int,int, ray*prToPass,int, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D, double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D); border_hit_info(rays_straight*,ray*,int,int, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D, double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D); int get_ref_bord_num(); int get_hit_bord_num(); }; // Прохождение по пути, заданному шаблоном, строго дальше, нежели этот шаблон class hit_through_border_info:public general_hit_info{ protected: rays_straight * pr; ray * prTemplate; int iReflectBorder; geophys_params gp; raytr_params rp; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); virtual void get_ray_parameters (const point3d &pWhere,const crossing&c,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); virtual void get_ray_parameters(const point3d &pWhere,const ray* rLast,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); hit_through_border_info(rays_straight *,ray *, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i3=PM_MAX_ITERATIONS_COUNT_D, double d2=PM_ALPHA_STOP_D/10., int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D); }; #endif /* p_straight_elements.H */ /* Melnikov George Yu. 2-Feb-2000 */ /* ... */
43 protected:
44  rays_straight * pr;
45  IntAr iaTemplate;
46  int iReflectBorder;
47  int iHitBorder;
48  int iBody;
49 
50  Logic verify_ray (ray*r)const;
51 public:
52  virtual ray* shoot(ray_parameters&,point&,Logic&,double);
53  virtual ray* shoot(double,double,point&,Logic&,double);
54  virtual Logic good_enough(double,ray*);
56  ray*prToPass,int,
57  double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D,
58  int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D,
59  double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D);
61  double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D,
62  int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D,
63  double d2=PM_ALPHA_STOP_D,int i3=PM_MAX_ITERATIONS_COUNT_D);
64  int get_ref_bord_num();
65  int get_hit_bord_num();
66 };
67 
68 // Прохождение по пути, заданному шаблоном, строго дальше, нежели этот шаблонclass hit_through_border_info:public general_hit_info{ protected: rays_straight * pr; ray * prTemplate; int iReflectBorder; geophys_params gp; raytr_params rp; public: virtual ray* shoot(ray_parameters&,point&,Logic&,double); virtual ray* shoot(double,double,point&,Logic&,double); virtual Logic good_enough(double,ray*); virtual void get_ray_parameters (const point3d &pWhere,const crossing&c,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); virtual void get_ray_parameters(const point3d &pWhere,const ray* rLast,double &dFi, double &dAz,double &dDFi,double& dDAz,double &dRo); hit_through_border_info(rays_straight *,ray *, double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D, int i3=PM_MAX_ITERATIONS_COUNT_D, double d2=PM_ALPHA_STOP_D/10., int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D); }; #endif /* p_straight_elements.H */ /* Melnikov George Yu. 2-Feb-2000 */ /* ... */
70 protected:
71  rays_straight * pr;
72  ray * prTemplate;
73  int iReflectBorder;
74  geophys_params gp;
75  raytr_params rp;
76 public:
77  virtual ray* shoot(ray_parameters&,point&,Logic&,double);
78  virtual ray* shoot(double,double,point&,Logic&,double);
79  virtual Logic good_enough(double,ray*);
80 
81  virtual void
82  get_ray_parameters (const point3d &pWhere,const crossing&c,double &dFi,
83  double &dAz,double &dDFi,double& dDAz,double &dRo);
84  virtual void
85  get_ray_parameters(const point3d &pWhere,const ray* rLast,double &dFi,
86  double &dAz,double &dDFi,double& dDAz,double &dRo);
87 
89  double dl=PM_ALPHA_LESS_D,double dm=PM_ALPHA_MORE_D,
90  int i3=PM_MAX_ITERATIONS_COUNT_D,
91  double d2=PM_ALPHA_STOP_D/10.,
92  int i1=MN_CHINA_D,double d1=MN_PHI_D,int i2=MILNUM2_D);
93 };
94 
95 #endif /* p_straight_elements.H */
96 
97 /* Melnikov George Yu. 2-Feb-2000 */
98 /* ... */
Definition: p_raytr_elements.H:113
Definition: any_elements.H:22
Definition: p_straight_elements.H:9
Definition: p_straight_elements.H:69
Definition: IntAr.H:14
Definition: rays.H:61
Definition: p_elements.H:145
Definition: geometry.H:16
Definition: rays.H:81
Definition: p_raytr_hits.H:66
Definition: p_straight_elements.H:42
Definition: p_raytr_hits.H:31
Definition: rays_straight.H:11
Definition: any_elements.H:33