MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
stline.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// stline.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:53:59 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 
25 #include "stline.h"
26 #include "stvector.h"
27 #include "stdirection.h"
28 #include "st_point.h"
29 #include "st_gestionnaire.h"
30 #include "ot_mathematique.h"
31 #include "constantegeo.h"
32 
33 #include <math.h>
34 
35 
36 
37 
38 
39 ST_LINE::ST_LINE(long LigneCourante,std::string idori,long point,long vector):ST_COURBE(LigneCourante,idori),id_point(point),id_vector(vector)
40 {
41 }
42 
43 ST_LINE::ST_LINE(double *origine,double *dir):ST_COURBE()
44 {
45  point[0]=origine[0];
46  point[1]=origine[1];
47  point[2]=origine[2];
48  vecteur_directeur[0]=dir[0];
49  vecteur_directeur[1]=dir[1];
50  vecteur_directeur[2]=dir[2];
51 }
52 
53 
54 
56 {
57  return id_point;
58 }
59 
61 {
62  ST_VECTOR* vecteur=gest->lst_vector.getid(id_vector);
63  ST_POINT* pt=gest->lst_point.getid(id_point);
64  pt->evaluer(point);
65  ST_DIRECTION* dir=gest->lst_direction.getid(vecteur->get_id_direction());
66  double *direct=dir->get_direction();
67  vecteur_directeur[0]=direct[0];
68  vecteur_directeur[1]=direct[1];
69  vecteur_directeur[2]=direct[2];
70 }
71 
73 {
74  return id_vector;
75 }
76 void ST_LINE::evaluer(double t,double *xyz)
77 {
78  xyz[0]=point[0]+t*vecteur_directeur[0];
79  xyz[1]=point[1]+t*vecteur_directeur[1];
80  xyz[2]=point[2]+t*vecteur_directeur[2];
81 }
82 void ST_LINE::deriver(double t,double *dxyz)
83 {
84  dxyz[0]=vecteur_directeur[0];
85  dxyz[1]=vecteur_directeur[1];
86  dxyz[2]=vecteur_directeur[2];
87 }
88 void ST_LINE::deriver_seconde(double t,double *ddxyz,double* dxyz ,double* xyz )
89 {
90  ddxyz[0]=0.;
91  ddxyz[1]=0.;
92  ddxyz[2]=0.;
93 
94  if (dxyz!=NULL)
95  {
96  dxyz[0]=vecteur_directeur[0];
97  dxyz[1]=vecteur_directeur[1];
98  dxyz[2]=vecteur_directeur[2];
99  }
100  if (xyz!=NULL)
101  {
102  xyz[0]=point[0]+t*vecteur_directeur[0];
103  xyz[1]=point[1]+t*vecteur_directeur[1];
104  xyz[2]=point[2]+t*vecteur_directeur[2];
105  }
106 }
107 
108 
109 void ST_LINE::inverser(double& t,double *xyz,double precision)
110 {
111  int num;
112  if (!(OPERATEUR::egal(vecteur_directeur[0],0.,0.000001))) num=0;
113  else if (!(OPERATEUR::egal(vecteur_directeur[1],0.,0.000001))) num=1;
114  else num=2;
115  t=xyz[num]-point[num];
116  t=t/vecteur_directeur[num];
117 }
118 
119 
121 {
122  return -1e300;
123 }
125 {
126  return 1e300;
127 }
128 double ST_LINE::get_longueur(double t1,double t2,double precis)
129 {
131  norme=sqrt(norme);
132  return norme*(t2-t1);
133 }
135 {
136  return 0;
137 }
139 {
140  return 0.;
141 }
142 
144 {
145  param.ajouter(point[0]);
146  param.ajouter(point[1]);
147  param.ajouter(point[2]);
148  param.ajouter(vecteur_directeur[0]);
149  param.ajouter(vecteur_directeur[1]);
150  param.ajouter(vecteur_directeur[2]);
152 }
153 
154 
156 {
157  util=true;
158  gest->lst_point.getid(id_point)->est_util(gest);
159  gest->lst_vector.getid(id_vector)->est_util(gest);
160 }
161 
162 
163 
164 void ST_LINE::get_param_NURBS(int& indx_premier_ptctr,TPL_LISTE_ENTITE<double> &param)
165 {
166  param.ajouter(1);
167 
168  param.ajouter(2);
169  param.ajouter(0);
170 
171 
172  param.ajouter(2);
173  param.ajouter(0);
174 
175 
176  param.ajouter(0);
177  param.ajouter(0);
178  param.ajouter(1);
179  param.ajouter(1);
180 
181  double u_inf=10e6;
182  double xyz[3];
183 
184  xyz[0]=point[0]+u_inf*vecteur_directeur[0];
185  xyz[1]=point[1]+u_inf*vecteur_directeur[1];
186  xyz[2]=point[2]+u_inf*vecteur_directeur[2];
187 
188  param.ajouter(xyz[0]);
189  param.ajouter(xyz[1]);
190  param.ajouter(xyz[2]);
191  param.ajouter(1.);
192 
193 
194  xyz[0]=point[0]-u_inf*vecteur_directeur[0];
195  xyz[1]=point[1]-u_inf*vecteur_directeur[1];
196  xyz[2]=point[2]-u_inf*vecteur_directeur[2];
197 
198  param.ajouter(xyz[0]);
199  param.ajouter(xyz[1]);
200  param.ajouter(xyz[2]);
201  param.ajouter(1.);
202 
203  indx_premier_ptctr=9;
204 
205 }
ST_LINE::get_id_vector
virtual long get_id_vector(void)
Definition: stline.cpp:72
ST_GESTIONNAIRE
Definition: st_gestionnaire.h:55
stvector.h
ST_GESTIONNAIRE::lst_direction
TPL_MAP_ENTITE< class ST_DIRECTION * > lst_direction
Definition: st_gestionnaire.h:90
ST_LINE::inverser
virtual void inverser(double &t, double *xyz, double precision=1e-6)
Definition: stline.cpp:109
ST_VECTOR::est_util
virtual void est_util(class ST_GESTIONNAIRE *gest)
Definition: stvector.cpp:48
st_gestionnaire.h
ST_VECTOR::get_id_direction
virtual long get_id_direction(void)
Definition: stvector.cpp:37
ST_POINT::evaluer
virtual void evaluer(double *xyz)
Definition: st_point.cpp:50
ST_LINE::get_id_point
virtual long get_id_point(void)
Definition: stline.cpp:55
ST_LINE::evaluer
virtual void evaluer(double t, double *xyz)
Definition: stline.cpp:76
ST_VECTOR
Definition: stvector.h:33
ST_LINE::get_periode
virtual double get_periode(void)
Definition: stline.cpp:138
ST_IDENTIFICATEUR::est_util
virtual void est_util(class ST_GESTIONNAIRE *gest)
Definition: st_ident.cpp:60
ST_GESTIONNAIRE::lst_point
TPL_MAP_ENTITE< class ST_POINT * > lst_point
Definition: st_gestionnaire.h:91
ST_LINE::est_util
virtual void est_util(class ST_GESTIONNAIRE *gest)
Definition: stline.cpp:155
ST_LINE::initialiser
virtual void initialiser(class ST_GESTIONNAIRE *gest)
Definition: stline.cpp:60
ST_DIRECTION
Definition: stdirection.h:32
ST_LINE::get_longueur
virtual double get_longueur(double t1, double t2, double precis=1e6)
Definition: stline.cpp:128
ST_LINE::get_tmin
virtual double get_tmin()
Definition: stline.cpp:120
ST_LINE::est_periodique
virtual int est_periodique(void)
Definition: stline.cpp:134
ST_POINT
Definition: st_point.h:30
stdirection.h
OPERATEUR::egal
static int egal(double a, double b, double eps)
Definition: ot_mathematique.cpp:1629
constantegeo.h
ST_LINE::ST_LINE
ST_LINE(long LigneCourante, std::string idori, long point, long vector)
Definition: stline.cpp:39
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
ST_LINE::id_vector
long id_vector
Definition: stline.h:58
ST_LINE::get_tmax
virtual double get_tmax()
Definition: stline.cpp:124
ot_mathematique.h
ST_LINE::point
double point[3]
Definition: stline.h:59
ST_LINE::deriver
virtual void deriver(double t, double *xyz)
Definition: stline.cpp:82
ST_DIRECTION::get_direction
virtual double * get_direction(void)
Definition: stdirection.cpp:42
ST_LINE::get_type_geometrique
virtual int get_type_geometrique(TPL_LISTE_ENTITE< double > &param)
Definition: stline.cpp:143
ST_LINE::vecteur_directeur
double vecteur_directeur[3]
Definition: stline.h:60
TPL_MAP_ENTITE::getid
virtual X getid(unsigned long num)
Definition: tpl_map_entite.h:96
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
ST_GESTIONNAIRE::lst_vector
TPL_MAP_ENTITE< class ST_VECTOR * > lst_vector
Definition: st_gestionnaire.h:70
TPL_LISTE_ENTITE< double >
ST_LINE::get_param_NURBS
virtual void get_param_NURBS(int &indx_premier_ptctr, TPL_LISTE_ENTITE< double > &param)
Definition: stline.cpp:164
stline.h
GEOMETRIE::CONST::Co_LINE
@ Co_LINE
Definition: constantegeo.h:32
ST_IDENTIFICATEUR::util
bool util
Definition: st_ident.h:46
st_point.h
ST_LINE::id_point
long id_point
Definition: stline.h:57
ST_LINE::deriver_seconde
virtual void deriver_seconde(double t, double *ddxyz, double *dxyz=NULL, double *xyz=NULL)
Definition: stline.cpp:88
ST_COURBE
Definition: st_courbe.h:33