UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
rays.H
1 /* rays.H */
2 /* $Id: rays.H,v 2.12 2005/07/18 07:16:06 nikita Exp $ */
3 #ifndef __rays_H
4 #define __rays_H
5 
6 /*
7  Классы, описанные в заголовке:
8  ray -- луч, выходящий из источника;
9 
10  ray_parameters -- параметры луча, по которым, вне зависимости от текущего
11  состояния rays_set можно восстановить нахождение луча в прямоугольной сетке.
12 
13  rays_set -- прямоугольная сетка лучей, которая по мере надобности разрезается, и в которой хранятся все лучи, вышедшие из источника. */ #include <ldb/dbtools.h> #include <mix/DoubleAr.H> #include <mix/ObjectsAr.H> #include <mod3d/mod3d_basic.H> #define PM_FB 1 #define PM_FULL 0 #define PM_CREATE 1 #define PM_ADD 2 // Классы, используемые в заголовке class crossings; class crossing; class crossings_ptrs; class pl_raytr_model; class pl_fict_border; class ray_specifics; // start of insertion by nikita typedef struct rayPathInfo { aPoints* points; int nReflectBorder; int receiver; }; #define AssocAr rayPathAr typedef struct { unsigned key;//ray identifier in database RAYPATHINFO table rayPathInfo value;//ray path points and receiver, reflection border binding } rayPath; #define AssocItemType rayPath #define AssocKeyField key #define AssocKeyType unsigned #define AssocKeysCmp(key1,key2) COMPAR(key1,key2) #include <mix/AssocAr.H> // end of insertion by nikita class ray_parameters{ protected: // В радианах double dFi,dAz; public: void set_pars(double,double); ray_parameters(){;}; ray_parameters(double,double); friend int operator==(const ray_parameters &rp1, const ray_parameters &rp2); double fi()const{return dFi;}; double az()const{return dAz;}; }; #define AnyType ray_parameters #define AnyAr ray_parameters_dynar #include <mix/AnyAr.H> #define R_BORDER 1 #define R_NODE 2 class ray{ protected: pl_raytr_model *pm; int iStored; // Обозначает, вызывали ли для луча запись его пересечений ray_parameters rp; // Откуда выстрелили // Список указателей на пересечения crossings_ptrs *cr; // Создается только из rays_shoot ray(const ray_parameters &RP,crossings_ptrs *CR,pl_raytr_model*p); // Проверяет, проходит ли луч через границу с указанным номером Logic crosses(int i); // Возвращает ближайшее пересечение crossing closest_crossing(const point3d &pWhat)const; friend class rays_shoot; friend class rays_set; public: ray(ray*,int iTo,int iKind=R_BORDER); // Заглушечка на случай попадания в одном теле. Криво, конечно :( ray(ray_parameters _rp,pl_raytr_model *_pm); ~ray(); // Возвращают какую-надо информацию о луче void add_RCoefs( DoubleAr&) const; void add_Ro(DoubleAr&,const pl_raytr_model * const) const; void add_Ksi(DoubleAr&) const; void add_BorderNormals(DoubleAr&,const pl_raytr_model* const, double A=0,double B=0,double C=0) const; void add_last_dxdaz(DoubleAr&) const; void add_last_dxdfi(DoubleAr&) const; void add_last_vpol (DoubleAr&) const; double time() const; double time_without_last() const; crossing last_crossing() const; crossing next_to_last_crossing()const; int n_of_nodes() const; ray_parameters ray_params() const {return rp;}; point reflection_point()const; double get_refrat() const; int reflection_number()const; Logic fictive_reflection()const; const crossings_ptrs * crossings()const{return cr;}; void merge(const ray*); const pl_raytr_model *father ()const{return pm;}; }; typedef ray* p_ray; typedef ObjectsAr<p_ray> rays; // Грядут переделки, поскольку луч может "ломаться" - проходить через ребра... struct ray_to_receiver{ void load_garries(ray*rTmp,pl_raytr_model*p,double A=0,double B=0,double C=0); void get_cross_points(aPoints* cr_points); //nikita 17.05.05 static unsigned globalRayCounter; unsigned rayId; #if 0 // Что-то такое должно иметь место быть... PointsAr apBreaks; ray_parameters_dynar arbBreakAngles; #endif point crossPoints[250];//nikita 17.05.05 int nCrossPoints;//nikita 17.05.05 double dFi; double dAz; double dTime; point pReflection; int iReflectionBorder; // Данные для расчета амплитуды double diver,prop; double dRefRat; double vpol[3]; ray_to_receiver(){/*crossPoints = NULL;*/ nCrossPoints=0;}; ray_to_receiver(const ray_to_receiver&);//inserted by nikita 26.05.05 ray_to_receiver(int ir,ray*,pl_raytr_model *); // ~ray_to_receiver(){if (crossPoints!=NULL) free(crossPoints);}; // Для ввода из базы данных ray_to_receiver(double,double,double,double,double, const point&,int,double, double vp[3]); // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
14  разрезается, и в которой хранятся все лучи, вышедшие из источника.
15  */
16 
17 
18 #include <ldb/dbtools.h>
19 #include <mix/DoubleAr.H>
20 
21 #include <mix/ObjectsAr.H>
22 #include <mod3d/mod3d_basic.H>
23 
24 #define PM_FB 1
25 #define PM_FULL 0
26 
27 #define PM_CREATE 1
28 #define PM_ADD 2
29 
30 // Классы, используемые в заголовкеclass crossings; class crossing; class crossings_ptrs; class pl_raytr_model; class pl_fict_border; class ray_specifics; // start of insertion by nikita typedef struct rayPathInfo { aPoints* points; int nReflectBorder; int receiver; }; #define AssocAr rayPathAr typedef struct { unsigned key;//ray identifier in database RAYPATHINFO table rayPathInfo value;//ray path points and receiver, reflection border binding } rayPath; #define AssocItemType rayPath #define AssocKeyField key #define AssocKeyType unsigned #define AssocKeysCmp(key1,key2) COMPAR(key1,key2) #include <mix/AssocAr.H> // end of insertion by nikita class ray_parameters{ protected: // В радианах double dFi,dAz; public: void set_pars(double,double); ray_parameters(){;}; ray_parameters(double,double); friend int operator==(const ray_parameters &rp1, const ray_parameters &rp2); double fi()const{return dFi;}; double az()const{return dAz;}; }; #define AnyType ray_parameters #define AnyAr ray_parameters_dynar #include <mix/AnyAr.H> #define R_BORDER 1 #define R_NODE 2 class ray{ protected: pl_raytr_model *pm; int iStored; // Обозначает, вызывали ли для луча запись его пересечений ray_parameters rp; // Откуда выстрелили // Список указателей на пересечения crossings_ptrs *cr; // Создается только из rays_shoot ray(const ray_parameters &RP,crossings_ptrs *CR,pl_raytr_model*p); // Проверяет, проходит ли луч через границу с указанным номером Logic crosses(int i); // Возвращает ближайшее пересечение crossing closest_crossing(const point3d &pWhat)const; friend class rays_shoot; friend class rays_set; public: ray(ray*,int iTo,int iKind=R_BORDER); // Заглушечка на случай попадания в одном теле. Криво, конечно :( ray(ray_parameters _rp,pl_raytr_model *_pm); ~ray(); // Возвращают какую-надо информацию о луче void add_RCoefs( DoubleAr&) const; void add_Ro(DoubleAr&,const pl_raytr_model * const) const; void add_Ksi(DoubleAr&) const; void add_BorderNormals(DoubleAr&,const pl_raytr_model* const, double A=0,double B=0,double C=0) const; void add_last_dxdaz(DoubleAr&) const; void add_last_dxdfi(DoubleAr&) const; void add_last_vpol (DoubleAr&) const; double time() const; double time_without_last() const; crossing last_crossing() const; crossing next_to_last_crossing()const; int n_of_nodes() const; ray_parameters ray_params() const {return rp;}; point reflection_point()const; double get_refrat() const; int reflection_number()const; Logic fictive_reflection()const; const crossings_ptrs * crossings()const{return cr;}; void merge(const ray*); const pl_raytr_model *father ()const{return pm;}; }; typedef ray* p_ray; typedef ObjectsAr<p_ray> rays; // Грядут переделки, поскольку луч может "ломаться" - проходить через ребра... struct ray_to_receiver{ void load_garries(ray*rTmp,pl_raytr_model*p,double A=0,double B=0,double C=0); void get_cross_points(aPoints* cr_points); //nikita 17.05.05 static unsigned globalRayCounter; unsigned rayId; #if 0 // Что-то такое должно иметь место быть... PointsAr apBreaks; ray_parameters_dynar arbBreakAngles; #endif point crossPoints[250];//nikita 17.05.05 int nCrossPoints;//nikita 17.05.05 double dFi; double dAz; double dTime; point pReflection; int iReflectionBorder; // Данные для расчета амплитуды double diver,prop; double dRefRat; double vpol[3]; ray_to_receiver(){/*crossPoints = NULL;*/ nCrossPoints=0;}; ray_to_receiver(const ray_to_receiver&);//inserted by nikita 26.05.05 ray_to_receiver(int ir,ray*,pl_raytr_model *); // ~ray_to_receiver(){if (crossPoints!=NULL) free(crossPoints);}; // Для ввода из базы данных ray_to_receiver(double,double,double,double,double, const point&,int,double, double vp[3]); // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
31 class crossings;
32 class crossing;
33 class crossings_ptrs;
34 class pl_raytr_model;
35 class pl_fict_border;
36 class ray_specifics;
37 
38 // start of insertion by nikita
39 typedef struct rayPathInfo {
40  aPoints* points;
41  int nReflectBorder;
42  int receiver;
43 };
44 
45 #define AssocAr rayPathAr
46 
47 typedef struct {
48  unsigned key;//ray identifier in database RAYPATHINFO table
49  rayPathInfo value;//ray path points and receiver, reflection border binding
50 } rayPath;
51 #define AssocItemType rayPath
52 #define AssocKeyField key
53 #define AssocKeyType unsigned
54 #define AssocKeysCmp(key1,key2) COMPAR(key1,key2)
55 #include <mix/AssocAr.H>
56 
57 // end of insertion by nikita
58 
59 
60 
62 protected:
63  // В радианах double dFi,dAz; public: void set_pars(double,double); ray_parameters(){;}; ray_parameters(double,double); friend int operator==(const ray_parameters &rp1, const ray_parameters &rp2); double fi()const{return dFi;}; double az()const{return dAz;}; }; #define AnyType ray_parameters #define AnyAr ray_parameters_dynar #include <mix/AnyAr.H> #define R_BORDER 1 #define R_NODE 2 class ray{ protected: pl_raytr_model *pm; int iStored; // Обозначает, вызывали ли для луча запись его пересечений ray_parameters rp; // Откуда выстрелили // Список указателей на пересечения crossings_ptrs *cr; // Создается только из rays_shoot ray(const ray_parameters &RP,crossings_ptrs *CR,pl_raytr_model*p); // Проверяет, проходит ли луч через границу с указанным номером Logic crosses(int i); // Возвращает ближайшее пересечение crossing closest_crossing(const point3d &pWhat)const; friend class rays_shoot; friend class rays_set; public: ray(ray*,int iTo,int iKind=R_BORDER); // Заглушечка на случай попадания в одном теле. Криво, конечно :( ray(ray_parameters _rp,pl_raytr_model *_pm); ~ray(); // Возвращают какую-надо информацию о луче void add_RCoefs( DoubleAr&) const; void add_Ro(DoubleAr&,const pl_raytr_model * const) const; void add_Ksi(DoubleAr&) const; void add_BorderNormals(DoubleAr&,const pl_raytr_model* const, double A=0,double B=0,double C=0) const; void add_last_dxdaz(DoubleAr&) const; void add_last_dxdfi(DoubleAr&) const; void add_last_vpol (DoubleAr&) const; double time() const; double time_without_last() const; crossing last_crossing() const; crossing next_to_last_crossing()const; int n_of_nodes() const; ray_parameters ray_params() const {return rp;}; point reflection_point()const; double get_refrat() const; int reflection_number()const; Logic fictive_reflection()const; const crossings_ptrs * crossings()const{return cr;}; void merge(const ray*); const pl_raytr_model *father ()const{return pm;}; }; typedef ray* p_ray; typedef ObjectsAr<p_ray> rays; // Грядут переделки, поскольку луч может "ломаться" - проходить через ребра... struct ray_to_receiver{ void load_garries(ray*rTmp,pl_raytr_model*p,double A=0,double B=0,double C=0); void get_cross_points(aPoints* cr_points); //nikita 17.05.05 static unsigned globalRayCounter; unsigned rayId; #if 0 // Что-то такое должно иметь место быть... PointsAr apBreaks; ray_parameters_dynar arbBreakAngles; #endif point crossPoints[250];//nikita 17.05.05 int nCrossPoints;//nikita 17.05.05 double dFi; double dAz; double dTime; point pReflection; int iReflectionBorder; // Данные для расчета амплитуды double diver,prop; double dRefRat; double vpol[3]; ray_to_receiver(){/*crossPoints = NULL;*/ nCrossPoints=0;}; ray_to_receiver(const ray_to_receiver&);//inserted by nikita 26.05.05 ray_to_receiver(int ir,ray*,pl_raytr_model *); // ~ray_to_receiver(){if (crossPoints!=NULL) free(crossPoints);}; // Для ввода из базы данных ray_to_receiver(double,double,double,double,double, const point&,int,double, double vp[3]); // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
64  double dFi,dAz;
65 public:
66  void set_pars(double,double);
67  ray_parameters(){;};
68  ray_parameters(double,double);
69 friend int operator==(const ray_parameters &rp1,
70  const ray_parameters &rp2);
71  double fi()const{return dFi;};
72  double az()const{return dAz;};
73 };
74 
75 #define AnyType ray_parameters
76 #define AnyAr ray_parameters_dynar
77 #include <mix/AnyAr.H>
78 
79 #define R_BORDER 1
80 #define R_NODE 2
81 class ray{
82 protected:
83  pl_raytr_model *pm;
84  int iStored; // Обозначает, вызывали ли для луча запись его пересечений
85  ray_parameters rp; // Откуда выстрелили // Список указателей на пересечения crossings_ptrs *cr; // Создается только из rays_shoot ray(const ray_parameters &RP,crossings_ptrs *CR,pl_raytr_model*p); // Проверяет, проходит ли луч через границу с указанным номером Logic crosses(int i); // Возвращает ближайшее пересечение crossing closest_crossing(const point3d &pWhat)const; friend class rays_shoot; friend class rays_set; public: ray(ray*,int iTo,int iKind=R_BORDER); // Заглушечка на случай попадания в одном теле. Криво, конечно :( ray(ray_parameters _rp,pl_raytr_model *_pm); ~ray(); // Возвращают какую-надо информацию о луче void add_RCoefs( DoubleAr&) const; void add_Ro(DoubleAr&,const pl_raytr_model * const) const; void add_Ksi(DoubleAr&) const; void add_BorderNormals(DoubleAr&,const pl_raytr_model* const, double A=0,double B=0,double C=0) const; void add_last_dxdaz(DoubleAr&) const; void add_last_dxdfi(DoubleAr&) const; void add_last_vpol (DoubleAr&) const; double time() const; double time_without_last() const; crossing last_crossing() const; crossing next_to_last_crossing()const; int n_of_nodes() const; ray_parameters ray_params() const {return rp;}; point reflection_point()const; double get_refrat() const; int reflection_number()const; Logic fictive_reflection()const; const crossings_ptrs * crossings()const{return cr;}; void merge(const ray*); const pl_raytr_model *father ()const{return pm;}; }; typedef ray* p_ray; typedef ObjectsAr<p_ray> rays; // Грядут переделки, поскольку луч может "ломаться" - проходить через ребра... struct ray_to_receiver{ void load_garries(ray*rTmp,pl_raytr_model*p,double A=0,double B=0,double C=0); void get_cross_points(aPoints* cr_points); //nikita 17.05.05 static unsigned globalRayCounter; unsigned rayId; #if 0 // Что-то такое должно иметь место быть... PointsAr apBreaks; ray_parameters_dynar arbBreakAngles; #endif point crossPoints[250];//nikita 17.05.05 int nCrossPoints;//nikita 17.05.05 double dFi; double dAz; double dTime; point pReflection; int iReflectionBorder; // Данные для расчета амплитуды double diver,prop; double dRefRat; double vpol[3]; ray_to_receiver(){/*crossPoints = NULL;*/ nCrossPoints=0;}; ray_to_receiver(const ray_to_receiver&);//inserted by nikita 26.05.05 ray_to_receiver(int ir,ray*,pl_raytr_model *); // ~ray_to_receiver(){if (crossPoints!=NULL) free(crossPoints);}; // Для ввода из базы данных ray_to_receiver(double,double,double,double,double, const point&,int,double, double vp[3]); // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
86  // Список указателей на пересечения
87  crossings_ptrs *cr;
88 
89  // Создается только из rays_shoot
90  ray(const ray_parameters &RP,crossings_ptrs *CR,pl_raytr_model*p);
91 
92  // Проверяет, проходит ли луч через границу с указанным номером
93  Logic crosses(int i);
94 
95  // Возвращает ближайшее пересечение
96  crossing closest_crossing(const point3d &pWhat)const;
97  friend class rays_shoot;
98  friend class rays_set;
99 public:
100  ray(ray*,int iTo,int iKind=R_BORDER);
101  // Заглушечка на случай попадания в одном теле. Криво, конечно :(
103  ~ray();
104  // Возвращают какую-надо информацию о луче void add_RCoefs( DoubleAr&) const; void add_Ro(DoubleAr&,const pl_raytr_model * const) const; void add_Ksi(DoubleAr&) const; void add_BorderNormals(DoubleAr&,const pl_raytr_model* const, double A=0,double B=0,double C=0) const; void add_last_dxdaz(DoubleAr&) const; void add_last_dxdfi(DoubleAr&) const; void add_last_vpol (DoubleAr&) const; double time() const; double time_without_last() const; crossing last_crossing() const; crossing next_to_last_crossing()const; int n_of_nodes() const; ray_parameters ray_params() const {return rp;}; point reflection_point()const; double get_refrat() const; int reflection_number()const; Logic fictive_reflection()const; const crossings_ptrs * crossings()const{return cr;}; void merge(const ray*); const pl_raytr_model *father ()const{return pm;}; }; typedef ray* p_ray; typedef ObjectsAr<p_ray> rays; // Грядут переделки, поскольку луч может "ломаться" - проходить через ребра... struct ray_to_receiver{ void load_garries(ray*rTmp,pl_raytr_model*p,double A=0,double B=0,double C=0); void get_cross_points(aPoints* cr_points); //nikita 17.05.05 static unsigned globalRayCounter; unsigned rayId; #if 0 // Что-то такое должно иметь место быть... PointsAr apBreaks; ray_parameters_dynar arbBreakAngles; #endif point crossPoints[250];//nikita 17.05.05 int nCrossPoints;//nikita 17.05.05 double dFi; double dAz; double dTime; point pReflection; int iReflectionBorder; // Данные для расчета амплитуды double diver,prop; double dRefRat; double vpol[3]; ray_to_receiver(){/*crossPoints = NULL;*/ nCrossPoints=0;}; ray_to_receiver(const ray_to_receiver&);//inserted by nikita 26.05.05 ray_to_receiver(int ir,ray*,pl_raytr_model *); // ~ray_to_receiver(){if (crossPoints!=NULL) free(crossPoints);}; // Для ввода из базы данных ray_to_receiver(double,double,double,double,double, const point&,int,double, double vp[3]); // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
105  void add_RCoefs( DoubleAr&) const;
106  void add_Ro(DoubleAr&,const pl_raytr_model * const) const;
107  void add_Ksi(DoubleAr&) const;
108  void add_BorderNormals(DoubleAr&,const pl_raytr_model* const,
109  double A=0,double B=0,double C=0) const;
110  void add_last_dxdaz(DoubleAr&) const;
111  void add_last_dxdfi(DoubleAr&) const;
112  void add_last_vpol (DoubleAr&) const;
113  double time() const;
114  double time_without_last() const;
115  crossing last_crossing() const;
116  crossing next_to_last_crossing()const;
117  int n_of_nodes() const;
118  ray_parameters ray_params() const {return rp;};
119  point reflection_point()const;
120  double get_refrat() const;
121  int reflection_number()const;
122  Logic fictive_reflection()const;
123  const crossings_ptrs * crossings()const{return cr;};
124  void merge(const ray*);
125  const pl_raytr_model *father ()const{return pm;};
126 };
127 
128 typedef ray* p_ray;
129 typedef ObjectsAr<p_ray> rays;
130 
131 // Грядут переделки, поскольку луч может "ломаться" - проходить через ребра...
133  void load_garries(ray*rTmp,pl_raytr_model*p,double A=0,double B=0,double C=0);
134  void get_cross_points(aPoints* cr_points); //nikita 17.05.05
135  static unsigned globalRayCounter;
136  unsigned rayId;
137 #if 0
138  // Что-то такое должно иметь место быть...
139  PointsAr apBreaks;
140  ray_parameters_dynar arbBreakAngles;
141 #endif
142  point crossPoints[250];//nikita 17.05.05
143  int nCrossPoints;//nikita 17.05.05
144  double dFi;
145  double dAz;
146  double dTime;
147  point pReflection;
148  int iReflectionBorder;
149 
150  // Данные для расчета амплитуды
151  double diver,prop;
152  double dRefRat;
153  double vpol[3];
154 
155  ray_to_receiver(){/*crossPoints = NULL;*/ nCrossPoints=0;};
156  ray_to_receiver(const ray_to_receiver&);//inserted by nikita 26.05.05
158  // ~ray_to_receiver(){if (crossPoints!=NULL) free(crossPoints);};
159  // Для ввода из базы данных ray_to_receiver(double,double,double,double,double, const point&,int,double, double vp[3]); // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
160  ray_to_receiver(double,double,double,double,double,
161  const point&,int,double, double vp[3]);
162 
163  // На случай фиктивной границы ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C); }; #define AnyType ray_to_receiver #define AnyAr ray_to_receiver_ar #include <mix/AnyAr.H> class rays_to_receiver:public ray_to_receiver_ar,public db_container{ protected: int iHRStoreRegime; point3d pReceiverPoint; Logic lReceiver; int N1,N2; void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const; int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL); int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const; rayPathAr* ray_path_ar; public: rays_to_receiver(db_results_manager& dbm,const char* sP,int id, const point3d& prp,int n1,int n2,int iHRR=PM_ADD): db_container(dbm,sP,id){ iHRStoreRegime=iHRR; lReceiver=TRUE; N1=n1;N2=n2; pReceiverPoint=prp; ray_path_ar=NULL; }; // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
164  ray_to_receiver (ray*rTmp,pl_raytr_model*, double A,double B,double C);
165 };
166 #define AnyType ray_to_receiver
167 #define AnyAr ray_to_receiver_ar
168 #include <mix/AnyAr.H>
169 
170 class rays_to_receiver:public ray_to_receiver_ar,public db_container{
171 protected:
172  int iHRStoreRegime;
173  point3d pReceiverPoint;
174  Logic lReceiver;
175  int N1,N2;
176  void get_item (dbItem& dbiRes, dbItem& dbiRN, dbItem* dbiRP=NULL)const;
177  int read_from_db (dbItem& dbiRays,dbItem& dbiRN, dbItem* dbiRP=NULL);
178  int write_to_db (dbItem& dbiRays,dbItem& dbiRN, const dbItem* dbiRP=NULL)const;
179  rayPathAr* ray_path_ar;
180 public:
181  rays_to_receiver(db_results_manager& dbm,const char* sP,int id,
182  const point3d& prp,int n1,int n2,int iHRR=PM_ADD):
183  db_container(dbm,sP,id){
184  iHRStoreRegime=iHRR;
185  lReceiver=TRUE;
186  N1=n1;N2=n2;
187  pReceiverPoint=prp;
188  ray_path_ar=NULL;
189  };
190 
191  // Чтобы считать из базы данных rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2, int iHRR=PM_ADD,void (*idle_func)()=NULL); const rayPathAr* get_ray_paths(){return ray_path_ar;}; ~rays_to_receiver(); point3d receiver()const{return pReceiverPoint;}; int n1() const {return N1;}; int n2() const {return N2;}; virtual int store() const; virtual int load(); }; class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{ public: rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");}; /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates: rays.H:338: Internal compiler error. rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. */ ~rays_to_receivers(){ for(register int i=0;i<count();i++){ delete fetch(i); }; clean(); }; rays_to_receiver *get(int N1,int N2)const; }; class rays_shoot{ protected: point3d pShotPoint; // Координаты источника pl_raytr_model *pmFather; // Папа-модель int iShotType; // Тип точки - источник/приемник int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
192  rays_to_receiver(db_results_manager& dbm,const char* sP,int id,int n1,int n2,
193  int iHRR=PM_ADD,void (*idle_func)()=NULL);
194 
195  const rayPathAr* get_ray_paths(){return ray_path_ar;};
196 
197  ~rays_to_receiver();
198 
199  point3d receiver()const{return pReceiverPoint;};
200  int n1() const {return N1;};
201  int n2() const {return N2;};
202  virtual int store() const;
203  virtual int load();
204 };
205 
206 
207 class rays_to_receivers:public ObjectsAr<rays_to_receiver*>{
208 public:
209  rays_to_receivers(){weFormatMsg(EL_DEBUG,"Creating HitRays...");};
210  /* if ~rays_to_receivers is absent then g++ 2.7.2.1 generates:
211  rays.H:338: Internal compiler error.
212  rays.H:338: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'.
213  */
215  for(register int i=0;i<count();i++){
216  delete fetch(i);
217  };
218  clean();
219  };
220  rays_to_receiver *get(int N1,int N2)const;
221 };
222 
224 protected:
225  point3d pShotPoint; // Координаты источника
226  pl_raytr_model *pmFather; // Папа-модель
227  int iShotType; // Тип точки - источник/приемник
228 
229  int N1,N2; // Военные номера для идентификации Володей // Получить луч (и все его пересечения) ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const; ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec, ray*r=NULL)const; int iUWKind; int iDWKind; public: rays_shoot(const point3d& p,int,int,int,pl_raytr_model *); // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
230 
231  // Получить луч (и все его пересечения)
232  ray* shoot_out(const ray_parameters &rp,int iKind=PM_FULL)const;
233  ray* a_shot (const double& dFi,const double& dAz,ray_specifics& rsSpec,
234  ray*r=NULL)const;
235  int iUWKind;
236  int iDWKind;
237 public:
238  rays_shoot(const point3d& p,int,int,int,pl_raytr_model *);
239  // Для получения сейсмограмм ray *raw_ray(const ray_parameters& rp) const; ray *raw_ray(double df,double da) const; // Набор различных функций попадания в точку // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point(ray_parameters, const point3d&, int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const; ray* raw_ray_point(double, double, int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat, ray*r=NULL) const; // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
240  ray *raw_ray(const ray_parameters& rp) const;
241  ray *raw_ray(double df,double da) const;
242 
243  // Набор различных функций попадания в точку
244  // Пытаемся попасть с точностью lE
245  // iBNumber - номер тела, в котором лежит точка - передается для оптимизации
246  ray* raw_ray_point(ray_parameters, const point3d&,
247  int iBNumber,Logic&,double& lE,IntAr *iat,ray*r=NULL) const;
248  ray* raw_ray_point(double, double,
249  int iBNumber, const point3d&, Logic&,double& lE,IntAr *iat,
250  ray*r=NULL) const;
251 
252 
253  // С отражением // Пытаемся попасть с точностью lE // iBNumber - номер тела, в котором лежит точка - передается для оптимизации ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber, Logic&,int,double& lE,IntAr *iat, Logic lRefRat=FALSE,ray*r=NULL) const; // Отражение от фиктивной границы в теле с известным номером ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber, int iBReflNumber,const pl_fict_border& fbReflect, Logic&,double& lE,point3d&,ray*r=NULL) const; point sp()const{return pShotPoint;}; int n1()const{return N1;}; int n2()const{return N2;}; void set_uw_kind(int ik){iUWKind=ik;}; void set_dw_kind(int ik){iDWKind=ik;}; int uw_kind(){return iUWKind;}; int dw_kind(){return iDWKind;}; }; // Люмпены... Logic equal_paths_to_border (ray* r1, ray*r2, int iB); Logic equal_paths_to_node (ray* r1, ray*r2, int iN); #endif /* rays.H */ /* Melnikov George Y. 2-Nov-1998 */ /* ... */ /* Melnikov George Yu. 11-Jan-1999 */ /* ... */
254  // Пытаемся попасть с точностью lE
255  // iBNumber - номер тела, в котором лежит точка - передается для оптимизации
256  ray* raw_ray_point_reflected(ray_parameters, const point3d&,int iBNumber,
257  Logic&,int,double& lE,IntAr *iat,
258  Logic lRefRat=FALSE,ray*r=NULL) const;
259  ray* raw_ray_point_reflected(double, double, const point3d&,int iBNumber,
260  Logic&,int,double& lE,IntAr *iat,
261  Logic lRefRat=FALSE,ray*r=NULL) const;
262 
263  // Отражение от фиктивной границы в теле с известным номером
264 
265  ray* raw_ray_fict_bord(double, double, const point3d&,int iBInNumber,
266  int iBReflNumber,const pl_fict_border& fbReflect,
267  Logic&,double& lE,point3d&,ray*r=NULL) const;
268  ray* raw_ray_fict_bord(ray_parameters, const point3d&,int iBInNumber,
269  int iBReflNumber,const pl_fict_border& fbReflect,
270  Logic&,double& lE,point3d&,ray*r=NULL) const;
271  point sp()const{return pShotPoint;};
272  int n1()const{return N1;};
273  int n2()const{return N2;};
274  void set_uw_kind(int ik){iUWKind=ik;};
275  void set_dw_kind(int ik){iDWKind=ik;};
276  int uw_kind(){return iUWKind;};
277  int dw_kind(){return iDWKind;};
278 };
279 
280 // Люмпены...
281 Logic equal_paths_to_border (ray* r1, ray*r2, int iB);
282 Logic equal_paths_to_node (ray* r1, ray*r2, int iN);
283 
284 
285 #endif /* rays.H */
286 /* Melnikov George Y. 2-Nov-1998 */
287 /* ... */
288 /* Melnikov George Yu. 11-Jan-1999 */
289 /* ... */
Definition: p_raytr_elements.H:113
Definition: db_managers.H:75
Definition: db_container.H:59
Definition: IntAr.H:14
Definition: rays.H:61
Definition: geometry.H:16
Definition: rays.H:207
Definition: rays.H:81
Definition: DoubleAr.H:14
Definition: rays.H:47
Definition: p_elements.H:134
Definition: rays.H:170
Definition: rays.H:223
Definition: rays_shoot_specifics.H:11
Definition: rays.H:39
Definition: dbnamedefs.h:85
Definition: rays.H:132
Definition: p_raytr_model.H:32