ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_surface.cpp
Revision: 157
Committed: Wed Sep 17 19:27:11 2008 UTC (16 years, 7 months ago) by souaissa
Original Path: magic/lib/geometrie/geometrie/src/vct_surface.cpp
File size: 15818 byte(s)
Log Message:
mise a jour de la classe vct_face

File Contents

# User Rev Content
1 souaissa 66 #include "gestionversion.h"
2    
3     //---------------------------------------------------------------------------
4    
5    
6     #pragma hdrstop
7 souaissa 85 #include<math.h>
8 souaissa 66 #include "vct_surface.h"
9     #include "mg_surface.h"
10     #include <iomanip.h>
11 souaissa 150 #include "vct_outils.h"
12     #include "constantegeo.h"
13 souaissa 66 //---------------------------------------------------------------------------
14    
15     #pragma package(smart_init)
16    
17    
18     VCT_SURFACE::VCT_SURFACE(MG_SURFACE* elemgeo):VCT_ELEMENT_GEOMETRIQUE(elemgeo)
19     {
20 souaissa 69 int indx_premier_ptctr;
21     TPL_LISTE_ENTITE<double> nurbs_params;
22 souaissa 150 TPL_LISTE_ENTITE<double> param_surf;
23 souaissa 66 elem_geo->get_param_NURBS(indx_premier_ptctr,nurbs_params);
24     nb_points=1/4.*(nurbs_params.get_nb()-indx_premier_ptctr);
25 souaissa 69 int nb_u=nurbs_params.get(3);
26     int nb_v=nurbs_params.get(4);
27 souaissa 66 double2 ZERO=0.;
28 souaissa 150 double2 INF=1e6;
29 souaissa 69 OT_VECTEUR_4DD VCT_NUL(0.,0.,0.,0.);
30 souaissa 150 int type=0;
31     if(((MG_SURFACE*)elem_geo)->get_type_geometrique(param_surf)==MGCo_PLAN)
32     {
33     type=1;
34     }
35     if(((MG_SURFACE*)elem_geo)->get_type_geometrique(param_surf)==MGCo_CYLINDRE)
36     {
37     type=2;
38     }
39 souaissa 66
40 souaissa 69 OT_VECTEUR_4DD V1,V2,V;
41 souaissa 66
42 souaissa 79 for(int pt=0;pt< nb_points;pt++)
43     {
44     V1[0]=nurbs_params.get( indx_premier_ptctr+ 4 * pt);
45     V1[1]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 1);
46     V1[2]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 2);
47     V1[3]=nurbs_params.get( indx_premier_ptctr+ 4 * pt + 3);
48 souaissa 157 //if (pt==0) lst_points.insert(lst_points.end(),V1);
49 souaissa 66
50 souaissa 79 lst_points.insert(lst_points.end(),V1);
51 souaissa 150 if(type==2)
52     {
53     if (pt==0|| pt==3||pt==7|| pt==10)
54     {
55     lst_points_axes.insert(lst_points_axes.end(),V1);
56     }
57     }
58     if(!type||type==1)
59     {
60     lst_points_axes.insert(lst_points_axes.end(),V1);
61    
62     }
63 souaissa 79 }
64    
65    
66    
67 souaissa 150 if(!type||type==1)
68 souaissa 66 for(int r=0;r<nb_v;r++)
69     {
70     for(int s=0;s<nb_u-1;s++)
71     {
72 souaissa 69
73     V1[0]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s);
74     V1[1]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s + 1);
75     V1[2]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s + 2);
76     V1[3]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * s + 3);
77 souaissa 71
78    
79 souaissa 79
80 souaissa 69 V2[0]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1));
81     V2[1]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1) + 1);
82     V2[2]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1) + 2);
83     V2[3]=nurbs_params.get( indx_premier_ptctr+ r *4 * nb_u + 4 * (s + 1) + 3);
84 souaissa 71
85 souaissa 66
86 souaissa 79
87 souaissa 69 V=V2-V1;
88 souaissa 66
89 souaissa 69 double2 norm_au_carre=(V[0]*V[0])+(V[1]*V[1])+(V[2]*V[2])+(V[3]*V[3]);
90     double2 norm=norm_au_carre^0.5;
91 souaissa 66
92 souaissa 150 if(V==VCT_NUL) {
93 souaissa 69 lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
94 souaissa 150 if(!type||type==1)
95     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),VCT_NUL);
96     }
97 souaissa 69
98 souaissa 66 if(norm!=ZERO){
99 souaissa 69 V=1./norm*V;
100     lst_vecteurs.insert(lst_vecteurs.end(),V);
101 souaissa 150 if(!type||type==1)
102     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
103 souaissa 66 }
104    
105     }
106     }
107    
108     for(int r=0;r<nb_v-1;r++)
109     {
110     for(int s=0;s<nb_u;s++)
111     {
112 souaissa 69 V1[0]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s);
113     V1[1]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s + 1);
114     V1[2]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s + 2);
115     V1[3]=nurbs_params.get(indx_premier_ptctr+ r * 4 * nb_u + 4 * s + 3);
116 souaissa 71
117    
118 souaissa 79
119 souaissa 69 V2[0]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s);
120     V2[1]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s + 1);
121     V2[2]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s + 2);
122     V2[3]=nurbs_params.get(indx_premier_ptctr+ (r+1) *4 * nb_u + 4 * s + 3);
123 souaissa 71
124 souaissa 79
125 souaissa 69 V=V2-V1;
126 souaissa 66
127 souaissa 69 double2 norm_au_carre=(V[0]*V[0])+(V[1]*V[1])+(V[2]*V[2])+(V[3]*V[3]);
128     double2 norm=norm_au_carre^0.5;
129 souaissa 66
130 souaissa 150 if(V==VCT_NUL) {
131 souaissa 69 lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
132 souaissa 150 if(!type||type==1)
133     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),VCT_NUL);
134     }
135 souaissa 66
136 souaissa 69 if (norm!=ZERO){
137     V=1./norm*V;
138     lst_vecteurs.insert(lst_vecteurs.end(),V);
139 souaissa 150 if(!type||type==1)
140     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
141 souaissa 66
142     }
143     }
144     }
145    
146 souaissa 150 if(type==2)
147     {
148     vector<OT_VECTEUR_4DD> lst_pts;
149     lst_pts.insert(lst_pts.end(),lst_points_axes[0] ) ;
150     lst_pts.insert(lst_pts.end(),lst_points_axes[1] ) ;
151     lst_pts.insert(lst_pts.end(),lst_points_axes[3] ) ;
152     lst_pts.insert(lst_pts.end(),lst_points_axes[2] ) ;
153     for(int r=0;r<lst_pts.size();r++)
154     { OT_VECTEUR_4DD V;
155     if(r<lst_pts.size()-1)
156     V=lst_pts[r+1]-lst_pts[r];
157     if(r==lst_pts.size()-1)
158     V=lst_pts[0]-lst_pts[r];
159     double2 norm_au_carre=(V[0]*V[0])+(V[1]*V[1])+(V[2]*V[2])+(V[3]*V[3]);
160     double2 norm=norm_au_carre^0.5;
161     if(V==VCT_NUL)
162     lst_vecteurs.insert(lst_vecteurs.end(),VCT_NUL);
163     if(norm!=ZERO)
164     {
165     V=1./norm*V;
166     lst_vecteurs_axes.insert(lst_vecteurs_axes.end(),V);
167     }
168     }
169 souaissa 69
170 souaissa 150 OT_VECTEUR_4DD V=lst_vecteurs_axes[1];
171     lst_vecteurs_axes[1]=lst_vecteurs_axes[2];
172     lst_vecteurs_axes[2]=V;
173 souaissa 69
174 souaissa 150 }
175    
176    
177 souaissa 66 }
178    
179    
180    
181 souaissa 69
182    
183    
184     VCT_SURFACE::VCT_SURFACE(VCT_SURFACE& mdd):VCT_ELEMENT_GEOMETRIQUE(mdd.elem_geo)
185 souaissa 66 {
186 souaissa 69 lst_vecteurs=mdd.lst_vecteurs;
187     lst_points=mdd.lst_points;
188     nb_points=mdd.nb_points ;
189     }
190 souaissa 66
191    
192 souaissa 69 VCT_SURFACE::~VCT_SURFACE()
193     {
194     }
195    
196 souaissa 85 std::vector<OT_VECTEUR_4DD>& VCT_SURFACE::get_points_controle(void)
197 souaissa 69 {
198 souaissa 85 return lst_points;
199 souaissa 69 }
200 souaissa 150 std::vector<OT_VECTEUR_4DD>& VCT_SURFACE::get_points_controle_pour_axes(void)
201     {
202     return lst_points_axes;
203     }
204 souaissa 85 std::vector<OT_VECTEUR_4DD> & VCT_SURFACE::get_vecteurs()
205 souaissa 71 {
206 souaissa 85 return lst_vecteurs;
207 souaissa 71 }
208 souaissa 69
209 souaissa 71
210 souaissa 69 OT_TENSEUR VCT_SURFACE:: calcule_tenseur_metrique()
211     {
212     OT_TENSEUR tns(lst_vecteurs);
213     return tns;
214     }
215    
216 souaissa 150 OT_VECTEUR_4DD VCT_SURFACE::calcule_barycentre(OT_TENSEUR& TT)
217 souaissa 69 {
218 souaissa 150 T=TT;
219 souaissa 69 OT_VECTEUR_4DD barycentre(0,0,0,0);
220    
221 souaissa 66 for(int i=0;i<nb_points;i++)
222     {
223 souaissa 150 OT_VECTEUR_4DD pt=get_nouveau_pt(T,lst_points[i]);
224     //barycentre+=lst_points[i];
225     barycentre+= pt;
226 souaissa 66 }
227    
228 souaissa 69 barycentre*=1./nb_points;
229 souaissa 150
230 souaissa 69 return barycentre;
231 souaissa 66 }
232    
233    
234    
235 souaissa 69 int VCT_SURFACE::get_nb_points()
236     {
237     return nb_points ;
238     }
239    
240    
241 souaissa 150 OT_TENSEUR VCT_SURFACE::calcule_covariance(OT_TENSEUR& T)
242 souaissa 66 {
243 souaissa 71 OT_TENSEUR COVARIANCE(4);
244 souaissa 85
245 souaissa 150 OT_VECTEUR_4DD barycentre=calcule_barycentre(T);
246 souaissa 66
247 souaissa 69
248 souaissa 71 OT_TENSEUR PT_CENTRE(nb_points,4),PT_CENTRE_TRANSPOSE;
249 souaissa 69
250 souaissa 71 for( int i=0;i<nb_points;i++)
251     {
252 souaissa 150 //OT_VECTEUR_4DD pt=lst_points[i];
253     OT_VECTEUR_4DD pt=get_nouveau_pt(T,lst_points[i]);
254     //OT_VECTEUR_4DD ptcent=lst_points[i]-barycentre;
255     OT_VECTEUR_4DD ptcent=pt-barycentre;
256 souaissa 85 PT_CENTRE(i,0)= ptcent[0];
257     PT_CENTRE(i,1)= ptcent[1];
258     PT_CENTRE(i,2)= ptcent[2];
259     PT_CENTRE(i,3)= ptcent[3];
260 souaissa 71 }
261     PT_CENTRE_TRANSPOSE =PT_CENTRE.transpose();
262    
263     COVARIANCE=PT_CENTRE_TRANSPOSE*PT_CENTRE;
264     double2 COEF= 1./nb_points;
265     COVARIANCE=COVARIANCE*COEF;
266    
267 souaissa 85 for(int i=0;i<4;i++)
268     for(int j=0;j<4;j++)
269     {
270     if(fabs(COVARIANCE(i,j).get_x())<=1e-8)
271     COVARIANCE(i,j).set_x(0.);
272    
273     }
274 souaissa 69 return COVARIANCE;
275 souaissa 66 }
276    
277 souaissa 69
278 souaissa 150 void VCT_SURFACE::calcule_axes_dinertie(OT_TENSEUR& T,OT_VECTEUR_4DD& D,OT_TENSEUR& V)
279 souaissa 66 {
280 souaissa 69 int n=4;
281     int nrot;
282    
283 souaissa 150 OT_TENSEUR COV=calcule_covariance(T);
284 souaissa 71
285    
286 souaissa 69 double2 zro=0.0;
287    
288 souaissa 71 if(COV(0,0)==zro&&COV(1,0)==zro&&COV(2,0)==zro&&COV(3,0)==zro)
289 souaissa 69 {
290 souaissa 71 COV(0,0)=1.0;
291     COV(1,0)=zro;
292     COV(2,0)=zro;
293     COV(3,0)=zro;
294 souaissa 69 }
295 souaissa 71 if(COV(0,1)==zro&&COV(1,1)==zro&&COV(2,1)==zro&&COV(3,1)==zro)
296 souaissa 69 {
297 souaissa 71 COV(0,1)=zro;
298     COV(1,1)=1.0;
299     COV(2,1)=zro;
300     COV(3,1)=zro;
301 souaissa 69 }
302 souaissa 71 if(COV(0,2)==zro&&COV(1,2)==zro&&COV(2,2)==zro&&COV(3,2)==zro)
303 souaissa 69 {
304 souaissa 71 COV(0,2)=zro;
305     COV(1,2)=zro;
306     COV(2,2)=1.0;
307     COV(3,2)=zro;
308 souaissa 69 }
309 souaissa 71 if(COV(0,3)==zro&&COV(1,3)==zro&&COV(2,3)==zro&&COV(3,3)==zro)
310 souaissa 69 {
311 souaissa 71 COV(0,3)=zro;
312     COV(1,3)=zro;
313     COV(2,3)=zro;
314     COV(3,3)=1.0;
315 souaissa 69 }
316    
317    
318 souaissa 71 COV.get_orthogonalisation(COV,D,V,n,nrot);
319 souaissa 69
320 souaissa 66 }
321    
322    
323 souaissa 150 OT_TENSEUR VCT_SURFACE:: calcule_tenseur_inertie_au_barycentre(OT_TENSEUR& T) //repere globale
324 souaissa 69 {
325 souaissa 71 OT_TENSEUR INERTIE(4);
326 souaissa 150 OT_TENSEUR cov=calcule_covariance(T);
327 souaissa 69 double2 nb_pts=nb_points;
328     double2 MOINS_UN=-1.0;
329 souaissa 71 INERTIE=cov*MOINS_UN;
330     INERTIE=INERTIE*nb_pts;
331 souaissa 69
332 souaissa 71 INERTIE(0,0)=(cov(1,1)+cov(2,2)+cov(3,3))*nb_pts;
333     INERTIE(1,1)=(cov(0,0)+cov(2,2)+cov(3,3))*nb_pts;
334     INERTIE(2,2)=(cov(1,1)+cov(0,0)+cov(3,3))*nb_pts;
335     INERTIE(3,3)=(cov(1,1)+cov(2,2)+cov(0,0))*nb_pts;
336 souaissa 85 for(int i=0;i<4;i++)
337     for(int j=0;j<4;j++)
338     {
339     if(fabs(INERTIE(i,j).get_x())<=1e-12) INERTIE(i,j).set_x(0.);
340 souaissa 71
341 souaissa 85 }
342 souaissa 71 return INERTIE;
343 souaissa 150
344 souaissa 69 }
345    
346    
347 souaissa 150 OT_TENSEUR VCT_SURFACE:: calcule_tenseur_inertie_au_pt(OT_TENSEUR& T,OT_VECTEUR_4DD& POINT)
348 souaissa 69 {
349    
350 souaissa 150 OT_VECTEUR_4DD BARYCENTRE=calcule_barycentre(T);
351     OT_TENSEUR TENS=calcule_tenseur_inertie_au_barycentre(T);
352 souaissa 69
353     OT_VECTEUR_4DD ABC=POINT-BARYCENTRE;
354    
355     double2 a=ABC[0] ;
356     double2 b=ABC[1] ;
357     double2 c=ABC[2] ;
358     double2 d=ABC[3] ;
359    
360     TENS(0,0)=TENS(0,0)+b*b+c*c+d*d;
361     TENS(1,1)=TENS(1,1)+a*a+c*c+d*d;
362     TENS(2,2)=TENS(2,2)+a*a+b*b+d*d;
363 souaissa 71 TENS(3,3)=TENS(3,3)+a*a+b*b+c*c;
364 souaissa 69
365     TENS(0,1)=TENS(0,1)-nb_points*a*b;
366     TENS(0,2)=TENS(0,2)-nb_points*a*c;
367     TENS(0,3)=TENS(0,3)-nb_points*a*d;
368    
369     TENS(1,0)=TENS(1,0)-nb_points*b*a;
370     TENS(1,2)=TENS(1,2)-nb_points*b*c;
371     TENS(1,3)=TENS(1,3)-nb_points*b*d;
372    
373     TENS(2,0)=TENS(2,0)-nb_points*c*a;
374     TENS(2,1)=TENS(2,1)-nb_points*c*b;
375     TENS(2,3)=TENS(2,3)-nb_points*c*d;
376    
377     TENS(3,0)=TENS(3,0)-nb_points*d*a;
378     TENS(3,1)=TENS(3,1)-nb_points*d*b;
379     TENS(3,2)=TENS(3,2)-nb_points*d*c;
380    
381     return TENS;
382     }
383    
384    
385 souaissa 150 OT_TENSEUR VCT_SURFACE::calcule_tenseur_inertie_base_locale(OT_TENSEUR& T)
386 souaissa 69 {
387 souaissa 71
388 souaissa 69 OT_VECTEUR_4DD v1,v2,v3,v4;
389     OT_TENSEUR INERTIE;
390     OT_TENSEUR I_GLOBALE;
391 souaissa 71 OT_VECTEUR_4DD D;
392     OT_TENSEUR V(4);
393 souaissa 150 this->calcule_axes_dinertie(T,D,V);
394     INERTIE=this->calcule_tenseur_inertie_au_barycentre(T);
395 souaissa 69
396     I_GLOBALE= INERTIE;
397    
398     OT_TENSEUR P(4);
399     OT_TENSEUR I=I_GLOBALE;
400     OT_TENSEUR P_TRSPOSE;
401     OT_TENSEUR I_LOCALE;
402 souaissa 71 P=V;
403 souaissa 69 P_TRSPOSE=P.transpose();
404    
405     I_LOCALE=P_TRSPOSE*I;
406     I_LOCALE=I_LOCALE*P;
407 souaissa 85 for(int i=0;i<4;i++)
408     for(int j=0;j<4;j++)
409     {
410     if(fabs(I_LOCALE(i,j).get_x())<=1e-12) I_LOCALE(i,j).set_x(0.);
411     }
412     return I_LOCALE;
413 souaissa 150 return INERTIE;
414 souaissa 69
415     }
416    
417    
418    
419    
420 souaissa 150 OT_TENSEUR VCT_SURFACE::calcule_tenseur_inertie_base_entite(OT_TENSEUR& T,VCT& vct_f)
421 souaissa 69 {
422 souaissa 71 OT_VECTEUR_4DD Dv,Dw,G1,G2,G1G2;
423 souaissa 69 OT_TENSEUR P(4);
424     OT_TENSEUR pt;
425     OT_TENSEUR IV;
426 souaissa 71 OT_TENSEUR Q(4);
427 souaissa 69 OT_TENSEUR qt;
428     OT_TENSEUR R;
429     OT_TENSEUR Rt;
430     OT_TENSEUR IW;
431 souaissa 71 OT_TENSEUR MASSE_CONCENTRE(4);
432     OT_TENSEUR V(4),W(4);
433 souaissa 150 this->calcule_axes_dinertie(T,Dv,V);
434     vct_f.calcule_axes_dinertie(T,Dw,W);
435 souaissa 69
436 souaissa 71 P=V;
437     Q=W;
438 souaissa 69
439 souaissa 150 IW=vct_f.calcule_tenseur_inertie_base_locale(T);
440 souaissa 69
441     pt=P.transpose();
442     qt=Q.transpose();
443     R=pt*Q;
444     Rt=qt*P;
445     IV=R*IW;
446     IV=IV*Rt;
447 souaissa 66
448    
449 souaissa 150 G1=this->calcule_barycentre(T);
450     G2=vct_f.calcule_barycentre(T);
451 souaissa 69
452     G1G2=G2-G1;
453    
454     OT_VECTEUR_4DD G1G2_LOC; //Calcul du vecteur G1G2 dans la base locale;
455     for(int i=0;i<4;i++)
456     {
457     for(int j=0;j<4;j++)
458     {
459     G1G2_LOC[i]= G1G2_LOC[i]+pt(i,j)*G1G2[j];
460 souaissa 66 }
461 souaissa 69 }
462 souaissa 66
463 souaissa 69 MASSE_CONCENTRE(0,0)=nb_points*(G1G2_LOC[1]*G1G2_LOC[1]+G1G2_LOC[2]*G1G2_LOC[2]+G1G2_LOC[3]*G1G2_LOC[3]);
464     MASSE_CONCENTRE(0,1)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[1]);
465     MASSE_CONCENTRE(0,2)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[2]);
466     MASSE_CONCENTRE(0,3)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[3]);
467    
468     MASSE_CONCENTRE(1,0)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[0]);
469     MASSE_CONCENTRE(1,1)= nb_points*(G1G2_LOC[0]*G1G2_LOC[0]+G1G2_LOC[2]*G1G2_LOC[2]+G1G2_LOC[3]*G1G2_LOC[3]);
470     MASSE_CONCENTRE(1,2)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[2]);
471     MASSE_CONCENTRE(1,3)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[3]);
472    
473     MASSE_CONCENTRE(2,0)=-1*nb_points*(G1G2_LOC[2]*G1G2_LOC[0]);
474     MASSE_CONCENTRE(2,1)=-1*nb_points*(G1G2_LOC[2]*G1G2_LOC[1]);
475     MASSE_CONCENTRE(2,2)=nb_points*(G1G2_LOC[0]*G1G2_LOC[0]+G1G2_LOC[1]*G1G2_LOC[1]+G1G2_LOC[3]*G1G2_LOC[3]);
476 souaissa 79 MASSE_CONCENTRE(2,3)=-1*nb_points*(G1G2_LOC[3]*G1G2_LOC[2]);
477 souaissa 69
478     MASSE_CONCENTRE(3,0)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[3]);
479     MASSE_CONCENTRE(3,1)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[3]);
480     MASSE_CONCENTRE(3,2)=-1*nb_points*(G1G2_LOC[2]*G1G2_LOC[3]);
481     MASSE_CONCENTRE(3,3)=nb_points*(G1G2_LOC[0]*G1G2_LOC[0]+G1G2_LOC[1]*G1G2_LOC[1]+G1G2_LOC[2]*G1G2_LOC[2]);
482    
483     IV=IV+MASSE_CONCENTRE;
484 souaissa 85
485    
486 souaissa 79 return IV;
487 souaissa 85
488 souaissa 66 }
489    
490 souaissa 69
491     ostream& operator <<(ostream& os, VCT_SURFACE& vct_f)
492     {
493 souaissa 85
494 souaissa 69 vct_f.enregistrer(os) ;
495     return os;
496     }
497    
498 souaissa 71
499 souaissa 150 OT_VECTEUR_4DD VCT_SURFACE::get_nouveau_pt(OT_TENSEUR& T,OT_VECTEUR_4DD& v)
500     {
501     OT_VECTEUR_4DD temp;
502 souaissa 71
503 souaissa 150 for( int i=0;i<4;i++)
504     { temp[i]=0.;
505     for(int j=0;j<4;j++)
506     temp[i]= temp[i]+T(i,j)*v[j];
507     }
508     return temp;
509 souaissa 71
510 souaissa 150 }
511    
512    
513 souaissa 71 void VCT_SURFACE::enregistrer(std::ostream& ost)
514     {
515 souaissa 150 OT_TENSEUR TT(4);
516     for(int i=0;i<4;i++)
517     TT(i,i)=1.0;
518     T=TT;
519    
520 souaissa 71 ost<<"========================================"<<endl;
521     ost<<"% SURFACE: "<<endl;
522     ost<<"========================================"<<endl;
523     ost<<"POINTS_DE_CONTROLS: "<<endl;
524     ost<<"========================================"<<endl;
525    
526     for (unsigned int i=0;i< lst_points.size();i++)
527     {
528     OT_VECTEUR_4DD v= lst_points[i]; // Rmq: la precision nèest pas affocher, il faut rajouter l'affichage
529     ost<< v<<endl; // de la precision dans la classe doubleprecision
530     }
531    
532 souaissa 150 ost<<endl; /*
533 souaissa 71 ost<<"VECTORISATION: "<<endl;
534     ost<<"========================================"<<endl;
535     for (unsigned int i=0;i< lst_vecteurs.size();i++)
536     {
537     OT_VECTEUR_4DD v= lst_vecteurs[i];
538     ost<< v<<endl;
539     }
540    
541     ost<<endl<<endl;
542 souaissa 150 ost<<"BARYCENTRE: "<<endl; */
543 souaissa 71 ost<<"========================================"<<endl;
544 souaissa 150 OT_VECTEUR_4DD BARY= calcule_barycentre(T);
545 souaissa 71 ost<<BARY<<endl;
546     ost<<endl<<endl;
547 souaissa 150 /*
548 souaissa 71 ost<<"TENSEUR_METRIQUE: "<<endl;
549     ost<<"========================================"<<endl;
550     OT_TENSEUR TNS_MT= calcule_tenseur_metrique() ;
551     ost<< TNS_MT<<endl;
552     ost<<endl<<endl;
553     ost<<"TENSEUR_DE_COVARIANCE: "<<endl;
554     ost<<"========================================"<<endl;
555     OT_TENSEUR TNS_CV= calcule_covariance();
556     ost<< TNS_CV<<endl;
557     ost<<endl<<endl;
558 souaissa 150 */
559 souaissa 71 ost<<"AXES_D'INERTIE: "<<endl;
560     ost<<"========================================"<<endl;
561     OT_VECTEUR_4DD D;
562     OT_TENSEUR V(4);
563 souaissa 150 calcule_axes_dinertie(T,D,V);
564 souaissa 71 ost<< V<<endl;
565 souaissa 150 ost<<endl<<endl; /*
566 souaissa 71 ost<<"INERTIE_CALCULÉE_AU_BARYCENTRE: "<<endl;
567     ost<<"========================================"<<endl;
568     OT_TENSEUR I_BARY=calcule_tenseur_inertie_au_barycentre();
569     ost<<I_BARY<<endl;
570 souaissa 150
571 souaissa 71 ost<<endl<<endl;
572     ost<<"INERTIE_TRANSPORTÉE_EN_UN_POINT: "<<endl;
573     ost<<"========================================"<<endl;
574     OT_TENSEUR I_TRANSP=calcule_tenseur_inertie_au_pt(BARY);
575     ost<<I_TRANSP<<endl;
576 souaissa 150 ost<<endl<<endl; */
577 souaissa 71
578     ost<<"INERTIE_CALCULÉ_DANS_LA_BASE_LOCALE: "<<endl;
579     ost<<"========================================"<<endl;
580 souaissa 150 OT_TENSEUR I_BASE=calcule_tenseur_inertie_base_locale(T);
581 souaissa 71 ost<<I_BASE<<endl;
582     ost<<endl<<endl;
583     }
584    
585