1 |
francois |
1156 |
//####//------------------------------------------------------------ |
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 |
francois |
283 |
|
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 |
|
|
|
55 |
|
|
long ST_LINE::get_id_point(void) |
56 |
|
|
{ |
57 |
|
|
return id_point; |
58 |
|
|
} |
59 |
|
|
|
60 |
|
|
void ST_LINE::initialiser(ST_GESTIONNAIRE *gest) |
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 |
|
|
|
72 |
|
|
long ST_LINE::get_id_vector(void) |
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 |
|
|
|
120 |
|
|
double ST_LINE::get_tmin() |
121 |
|
|
{ |
122 |
|
|
return -1e300; |
123 |
|
|
} |
124 |
|
|
double ST_LINE::get_tmax() |
125 |
|
|
{ |
126 |
|
|
return 1e300; |
127 |
|
|
} |
128 |
|
|
double ST_LINE::get_longueur(double t1,double t2,double precis) |
129 |
|
|
{ |
130 |
|
|
double norme=vecteur_directeur[0]*vecteur_directeur[0]+vecteur_directeur[1]*vecteur_directeur[1]+vecteur_directeur[2]*vecteur_directeur[2]; |
131 |
|
|
norme=sqrt(norme); |
132 |
|
|
return norme*(t2-t1); |
133 |
|
|
} |
134 |
|
|
int ST_LINE::est_periodique(void) |
135 |
|
|
{ |
136 |
|
|
return 0; |
137 |
|
|
} |
138 |
|
|
double ST_LINE::get_periode(void) |
139 |
|
|
{ |
140 |
|
|
return 0.; |
141 |
|
|
} |
142 |
|
|
|
143 |
|
|
int ST_LINE::get_type_geometrique(TPL_LISTE_ENTITE<double> ¶m) |
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]); |
151 |
francois |
1149 |
return GEOMETRIE::CONST::Co_LINE; |
152 |
francois |
283 |
} |
153 |
|
|
|
154 |
|
|
|
155 |
|
|
void ST_LINE::est_util(ST_GESTIONNAIRE* gest) |
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> ¶m) |
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 |
francois |
433 |
param.ajouter(1.); |
192 |
francois |
283 |
|
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 |
francois |
433 |
param.ajouter(1.); |
202 |
francois |
283 |
|
203 |
|
|
indx_premier_ptctr=9; |
204 |
|
|
|
205 |
|
|
} |