144// Тело - набор многоугольников class pl_intern_body:public any_body{
protected:
pl_intern_body(pl_intern_body &bCopy);
pl_intern_splines* get_bodies_splines()const;
public:
pl_intern_body(geophys_params gp);
pl_intern_body(any_borders &ab,geophys_params gp);
~pl_intern_body(){;};
// Добавляем в этот класс, так как требуется пересечение с плоскостями
virtual int contains(const point &pWhat)const;
// Создание фиктивной границы внутри тела по заданной плоскости
int fict_border (const pl_spline& sSlice,p_pl_fict_border& bNew)const;
friend class pl_model;
};
typedef pl_intern_body* p_pl_intern_body;
typedef ObjectsAr<p_pl_intern_body> pl_intern_bodies;
// Элементы внешнего представления модели
class pl_spline:public any_ex_spline{
protected:
double a,b,c,d;
public:
pl_spline();
pl_spline(double A,double B,double C, double D);
// плоскость по трем точкам
pl_spline(const point& p1,const point& p2,const point& p3);
// Пересечение с отрезком входных точек
point cross(const point& p1,const point& p2) const;
// Перевод в локальную систему координат
point2D local(const point& pMain,
const point& p0,const point& p1,const point& p2) const;
// С какой стороны от плоскости лежит точка
int sign(const point & p) const;
void set_coef(double A,double B,double C, double D);
void get_coef(double &A,double &B,double &C, double &D);
double A() const {return a;};
double B() const {return b;};
double C() const {return c;};
double D() const {return d;};
double distance(const point3d &pWhere);
};
typedef pl_spline* p_pl_spline;
typedef ObjectsAr<p_pl_spline> p_pl_splines;
class pl_border:public any_ex_border{
protected:
DoubleAr aTops_X;
DoubleAr aTops_Y;
DoubleAr aTops_Z;
public:
pl_border();
pl_border(const aPoints & at, int ib[2], int is, border_flag bf);
pl_border(int ib[2], int is, border_flag bf);
point get_a_top(int i)const {return point(aTops_X(i),aTops_Y(i),aTops_Z(i));};
const DoubleAr& get_x()const;
const DoubleAr& get_y()const;
const DoubleAr& get_z()const;
// Аналог конструктора для перезаписи созданного объекта
int make_border(DoubleAr&ax,DoubleAr&ay,DoubleAr&az,
int ib[2], int is, border_flag bf);
int n_of_tops()const{return aTops_Z.count();};
int get_body(int ib);
int get_spline()const {return iSpline;};
};
// Почти то же, что и произвольное тело
class pl_body:public any_ex_body{
public:
pl_body():any_ex_body(){;};
pl_body(IntAr & ab, const geophys_params & gp, int in);
};
/* Функция-люмпен...*/
void get_splines_weights(const point& pLast,
const pl_intern_splines & paSplines,
const any_borders & paBorders,
DoubleAr&daWeights);
#endif /* p_elements.H */
/* Melnikov George Y. 16-Sep-1998 */
/* ... */
/* Melnikov George Yu. 31-Jan-2000 */
215// Аналог конструктора для перезаписи созданного объекта int make_border(DoubleAr&ax,DoubleAr&ay,DoubleAr&az,
int ib[2], int is, border_flag bf);
int n_of_tops()const{return aTops_Z.count();};
int get_body(int ib);
int get_spline()const {return iSpline;};
};
// Почти то же, что и произвольное тело
class pl_body:public any_ex_body{
public:
pl_body():any_ex_body(){;};
pl_body(IntAr & ab, const geophys_params & gp, int in);
};
/* Функция-люмпен...*/
void get_splines_weights(const point& pLast,
const pl_intern_splines & paSplines,
const any_borders & paBorders,
DoubleAr&daWeights);
#endif /* p_elements.H */
/* Melnikov George Y. 16-Sep-1998 */
/* ... */
/* Melnikov George Yu. 31-Jan-2000 */