ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 87
Committed: Fri May 2 14:28:44 2008 UTC (17 years ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 43113 byte(s)
Log Message:
Mise à jour des classes vct;
Mise à jour de la classe ot_tenseur;

File Contents

# User Rev Content
1 souaissa 66 //---------------------------------------------------------------------------
2     #include"gestionversion.h"
3    
4     #pragma hdrstop
5    
6     #include "vct_comparaison.h"
7 souaissa 74 #include"ot_mathematique.h"
8 souaissa 87 #include "vct_face.h"
9     #include "vct_surface.h"
10 souaissa 74 #include <iomanip.h>
11 souaissa 87
12 souaissa 66 //---------------------------------------------------------------------------
13    
14     #pragma package(smart_init)
15    
16    
17 souaissa 87 VCT_COMPARAISON::VCT_COMPARAISON(MG_FILE &gst1,MG_GEOMETRIE *mgeo1,char*file1,MG_FILE &gst2,MG_GEOMETRIE *mgeo2,char*file2)
18 souaissa 66 {
19    
20 souaissa 87 strcpy(filname1,file1);
21     strcpy(filname2,file2);
22     gest1=new MG_FILE(gst1);
23     gest2=new MG_FILE(gst2);
24     mggeo1=mgeo1;
25     mggeo2=mgeo2;
26 souaissa 66
27 souaissa 87 int nb_face1=mggeo1->get_nb_mg_face();
28     int nb_face2=mggeo2->get_nb_mg_face();
29 souaissa 66
30 souaissa 87 for(int i=0;i<nb_face1; i++)
31     {
32     MG_FACE* face1=mggeo1->get_mg_face(i);
33     MG_SURFACE*surf1=face1->get_surface();
34     int id1=face1->get_id();
35     OT_TENSEUR tns1_face(4),tns1_surf(4);
36     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
37     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
38     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
39    
40     tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
41     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
42    
43     ttns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
44     ttns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
45     vector<double2> ifac1; vector<double2>isurf1;
46     for(int r=0;r<4;r++)
47     {
48     ifac1.insert( ifac1.end(), ttns1_face(r,r));
49     isurf1.insert( isurf1.end(), ttns1_surf(r,r));
50     }
51    
52     for(int j=0;j<nb_face2;j++)
53     {
54     MG_FACE* face2=mggeo2->get_mg_face(j);
55     MG_SURFACE*surf2=face2->get_surface();
56     int id2=face2->get_id();
57     OT_TENSEUR tns2_face(4),tns2_surf(4);
58     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
59     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
60     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
61     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
62     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
63     ttns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
64     ttns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
65     vector<double2> ifac2; vector<double2> isurf2;
66     for(int r=0;r<4;r++)
67     {
68     ifac2.insert( ifac2.end(), ttns2_face(r,r));
69     isurf2.insert( isurf2.end(), ttns2_surf(r,r));
70     }
71     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
72     {
73     if(tns1_face.est_til_equivalent(tns2_face))
74     {
75     if(tns1_surf.est_til_equivalent(tns2_surf))
76     {
77     //similarite.insert(similarite.end(),id1);
78     //similarite.insert(similarite.end(),id2);
79     similarite.ajouter(id1);
80     similarite.ajouter(id2);
81     vector<unsigned int> indx1,indx2;
82     if(ttns1_face.listes_equivalentes(ifac1,ifac2,indx1))
83     {
84     if(ttns1_face.listes_equivalentes(isurf1,isurf2,indx2))
85     {
86     ssimilarite.ajouter(id1) ;
87     ssimilarite.ajouter(id2) ;
88     }
89     }
90    
91     }
92     }
93    
94     }
95     }
96     }
97    
98    
99 souaissa 66 }
100    
101    
102 souaissa 87 VCT_COMPARAISON::~VCT_COMPARAISON()
103 souaissa 66 {
104 souaissa 87 delete gest1;
105     delete gest2;
106     }
107 souaissa 66
108    
109 souaissa 87 void VCT_COMPARAISON::compare_les_deux_geometries()
110     {
111     int face_ref1;
112     int face_ref2;
113     TPL_LISTE_ENTITE<int> lst;
114     int nb_fsim1=similarite.get_nb()/2;
115     int nb_fsim2=ssimilarite.get_nb()/2;
116    
117     TPL_LISTE_ENTITE<int> list11;
118     TPL_LISTE_ENTITE<int> list12;
119     TPL_LISTE_ENTITE<int> list21;
120     TPL_LISTE_ENTITE<int> list22;
121     TPL_LISTE_ENTITE<int> list1_final;
122     TPL_LISTE_ENTITE<int> list2_final;
123    
124     for(int i=0;i<nb_fsim1;i++)
125     list11.ajouter(similarite.get(2*i));
126     for(int i=0;i<nb_fsim1;i++)
127     list12.ajouter(similarite.get(2*i+1));
128     for(int i=0;i<nb_fsim2;i++)
129     list21.ajouter(ssimilarite.get(2*i));
130     for(int i=0;i<nb_fsim2;i++)
131     list22.ajouter(ssimilarite.get(2*i+1));
132    
133     int c1,c2,c3,c,cc,c22;
134     int compt=0;
135     bool trouve_ref=false;
136     int pour_la_premiere_fois=1;
137     for(int i=0;i<nb_fsim1;i++)
138     {
139     int num11=list11.get(i);
140     int num12=list12.get(i);
141    
142     for(int j=0;j<nb_fsim2;j++)
143     {
144     int num21=list21.get(j);
145     int num22=list22.get(j);
146     if(num11==num21)
147     if(num12==num22)
148     {
149     list1_final.ajouter(num11);
150     list2_final.ajouter(num22);
151     if (i>0)
152     {
153    
154     if(num11==list11.get(i-1))
155     {
156     if(pour_la_premiere_fois)
157     {
158     lst.ajouter(list11.get(i-1));
159     lst.ajouter(list12.get(i-1));
160     pour_la_premiere_fois=0;
161     }
162     lst.ajouter(num11);
163     lst.ajouter(num12);
164     }
165     else
166     pour_la_premiere_fois=1;
167     }
168     compt++;
169     if(!trouve_ref)
170     {
171     if(compt==1)
172     c1=num11;
173     if(compt==2)
174     {
175     c2=num11;
176     c22= num12;
177     }
178     if(compt==3)
179     c3=num11;
180     if (compt==4)
181     {
182     if (c1!=c2&&c1!=c3&&c2!=c3)
183     {
184     c=c2;
185     cc=c22;
186     trouve_ref=true;
187     }
188     compt=0;
189     }
190    
191     break;
192     }
193    
194     }
195     }
196     }
197    
198     int nb_face1=list1_final.get_nb();
199     int nb_face2=list2_final.get_nb();
200    
201     TPL_LISTE_ENTITE<int> lst_fin;
202     this->trouve_face_de_reference(c,cc,lst,lst_fin);
203    
204    
205     TPL_LISTE_ENTITE<int> lst1,lst2;
206     int nb_face_doublant=lst_fin.get_nb()/2;
207    
208     for(int r=0;r<nb_face_doublant;r++)
209     {
210     lst1.ajouter( lst_fin.get(2*r));
211     lst2.ajouter( lst_fin.get(2*r+1));
212     }
213    
214     for(int i=0;i<list1_final.get_nb();i++)
215     {
216     int num1= list1_final.get(i);
217     int num2= list2_final.get(i);
218     if(!lst1.est_dans_la_liste(num1))
219     {
220     identite.ajouter(num1);
221     identite.ajouter(num2);
222     }
223     }
224    
225     for(int r=0;r<nb_face_doublant;r++)
226     {
227     int num1= lst_fin.get(2*r);
228     int num2= lst_fin.get(2*r+1);
229     identite.ajouter(num1);
230     identite.ajouter(num2);
231     }
232    
233     this->affecter_les_couleurs(1);
234    
235     }
236    
237    
238    
239     void VCT_COMPARAISON::compare_les_deux_geometries_vectoriellement()
240     {
241 souaissa 66 int nb_face1=mggeo1->get_nb_mg_face();
242     int nb_face2=mggeo2->get_nb_mg_face();
243 souaissa 87 similarite.vide();
244     for(int i=0;i<nb_face1; i++)
245     {
246     MG_FACE* face1=mggeo1->get_mg_face(i);
247     MG_SURFACE*surf1=face1->get_surface();
248     int id1=face1->get_id();
249     OT_TENSEUR tns1_face(4),tns1_surf(4);
250     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
251     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
252     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
253 souaissa 66
254 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
255     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
256 souaissa 66
257 souaissa 87 for(int j=0;j<nb_face2;j++)
258     {
259     MG_FACE* face2=mggeo2->get_mg_face(j);
260     MG_SURFACE*surf2=face2->get_surface();
261     int id2=face2->get_id();
262     OT_TENSEUR tns2_face(4),tns2_surf(4);
263     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
264     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
265     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
266     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
267     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
268 souaissa 66
269 souaissa 87 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
270     {
271     if(tns1_face.est_til_equivalent(tns2_face))
272     {
273     if(tns1_surf.est_til_equivalent(tns2_surf))
274     {
275     similarite.ajouter(id1);
276     similarite.ajouter(id2);
277     }
278     }
279     }
280     }
281     }
282     this->affecter_les_couleurs(21);
283    
284     }
285    
286     void VCT_COMPARAISON::compare_les_deux_geometries_inertiellement()
287     {
288     int nb_face1=mggeo1->get_nb_mg_face();
289     int nb_face2=mggeo2->get_nb_mg_face();
290     ssimilarite.vide();
291     for(int i=0;i<nb_face1; i++)
292     {
293     MG_FACE* face1=mggeo1->get_mg_face(i);
294     MG_SURFACE*surf1=face1->get_surface();
295     int id1=face1->get_id();
296     OT_TENSEUR tns1_face(4),tns1_surf(4);
297     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
298     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
299    
300     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
301     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
302     vector<double2> ifac1; vector<double2>isurf1;
303     for(int r=0;r<4;r++)
304     {
305     ifac1.insert( ifac1.end(), tns1_face(r,r));
306     isurf1.insert( isurf1.end(), tns1_surf(r,r));
307     }
308    
309 souaissa 66 for(int j=0;j<nb_face2;j++)
310     {
311    
312     MG_FACE* face2=mggeo2->get_mg_face(j);
313 souaissa 74 MG_SURFACE*surf2=face2->get_surface();
314 souaissa 66 int id2=face2->get_id();
315 souaissa 74 OT_TENSEUR tns2_face(4),tns2_surf(4);
316     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
317     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
318 souaissa 87 tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
319     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
320     vector<double2> ifac2; vector<double2> isurf2;
321     for(int r=0;r<4;r++)
322     {
323     ifac2.insert( ifac2.end(), tns2_face(r,r));
324     isurf2.insert( isurf2.end(), tns2_surf(r,r));
325     }
326 souaissa 66
327 souaissa 74 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
328 souaissa 66 {
329 souaissa 87 vector<unsigned int> indx1,indx2;
330     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
331 souaissa 66 {
332 souaissa 87 if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
333     {
334     ssimilarite.ajouter(id1);
335     ssimilarite.ajouter(id2);
336     }
337 souaissa 66 }
338 souaissa 87 }
339 souaissa 66
340 souaissa 87 }
341 souaissa 66
342 souaissa 87 }
343 souaissa 66
344 souaissa 87 this->affecter_les_couleurs(22);
345     }
346    
347     void VCT_COMPARAISON::compare_la_premiere_geometrie_inertiellement()
348     {
349     int nb_face1=mggeo1->get_nb_mg_face();
350     ssimilarite.vide();
351     for(int i=0;i<nb_face1; i++)
352     {
353     MG_FACE* face1=mggeo1->get_mg_face(i);
354     MG_SURFACE*surf1=face1->get_surface();
355     int id1=face1->get_id();
356     OT_TENSEUR tns1_face(4),tns1_surf(4);
357     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
358     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
359    
360     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
361     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
362     vector<double2> ifac1; vector<double2>isurf1;
363     for(int r=0;r<4;r++)
364     {
365     ifac1.insert( ifac1.end(), tns1_face(r,r));
366     isurf1.insert( isurf1.end(), tns1_surf(r,r));
367     }
368    
369     for(int j=0;j<nb_face1;j++)
370     {
371    
372     MG_FACE* face2=mggeo1->get_mg_face(j);
373     MG_SURFACE*surf2=face2->get_surface();
374     int id2=face2->get_id();
375     OT_TENSEUR tns2_face(4),tns2_surf(4);
376     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
377     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
378     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
379     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
380     vector<double2> ifac2; vector<double2> isurf2;
381     for(int r=0;r<4;r++)
382     {
383     ifac2.insert( ifac2.end(), tns2_face(r,r));
384     isurf2.insert( isurf2.end(), tns2_surf(r,r));
385     }
386    
387     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
388     {
389     vector<unsigned int> indx1,indx2;
390     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
391     {
392     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
393     {
394     ssimilarite.ajouter(id1);
395     ssimilarite.ajouter(id2);
396     }
397     }
398 souaissa 66 }
399    
400 souaissa 87 }
401    
402 souaissa 66 }
403 souaissa 87 this->affecter_les_couleurs(3);
404     }
405 souaissa 66
406    
407    
408    
409 souaissa 87 void VCT_COMPARAISON::compare_la_deuxieme_geometrie_inertiellement()
410     {
411     int nb_face2=mggeo2->get_nb_mg_face();
412     ssimilarite.vide();
413     for(int i=0;i<nb_face2; i++)
414     {
415     MG_FACE* face1=mggeo2->get_mg_face(i);
416     MG_SURFACE*surf1=face1->get_surface();
417     int id1=face1->get_id();
418     OT_TENSEUR tns1_face(4),tns1_surf(4);
419     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
420     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
421 souaissa 66
422 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
423     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
424     vector<double2> ifac1; vector<double2>isurf1;
425     for(int r=0;r<4;r++)
426     {
427     ifac1.insert( ifac1.end(), tns1_face(r,r));
428     isurf1.insert( isurf1.end(), tns1_surf(r,r));
429     }
430 souaissa 66
431 souaissa 87 for(int j=0;j<nb_face2;j++)
432     {
433 souaissa 66
434 souaissa 87 MG_FACE* face2=mggeo2->get_mg_face(j);
435     MG_SURFACE*surf2=face2->get_surface();
436     int id2=face2->get_id();
437     OT_TENSEUR tns2_face(4),tns2_surf(4);
438     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
439     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
440     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
441     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
442     vector<double2> ifac2; vector<double2> isurf2;
443     for(int r=0;r<4;r++)
444     {
445     ifac2.insert( ifac2.end(), tns2_face(r,r));
446     isurf2.insert( isurf2.end(), tns2_surf(r,r));
447     }
448 souaissa 66
449 souaissa 87 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
450     {
451     vector<unsigned int> indx1,indx2;
452     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
453     {
454     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
455     {
456     ssimilarite.ajouter(id1);
457     ssimilarite.ajouter(id2);
458     }
459     }
460     }
461 souaissa 66
462 souaissa 87 }
463    
464     }
465     this->affecter_les_couleurs(4);
466 souaissa 66 }
467    
468    
469    
470 souaissa 82
471 souaissa 87 void VCT_COMPARAISON::compare_geometrie(int niveau)
472 souaissa 82 {
473 souaissa 87 //niveau 1: comparaison de la vectorisation
474     //niveau 2: compraison de linertie
475     //niveau 3: compraison locale
476 souaissa 82
477    
478     int nb_face1=mggeo1->get_nb_mg_face();
479     int nb_face2=mggeo2->get_nb_mg_face();
480    
481 souaissa 87 switch (niveau)
482 souaissa 82 {
483 souaissa 87 case 1: // similarité reposant la vectorisation et l'inertie
484     {
485     for(int i=0;i<nb_face1; i++)
486     {
487     MG_FACE* face1=mggeo1->get_mg_face(i);
488     MG_SURFACE*surf1=face1->get_surface();
489     int id1=face1->get_id();
490     OT_TENSEUR tns1_face(4),tns1_surf(4);
491     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
492     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
493     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
494 souaissa 82
495 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
496     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
497 souaissa 82
498 souaissa 87 ttns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
499     ttns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
500     vector<double2> ifac1; vector<double2>isurf1;
501     for(int r=0;r<4;r++)
502     {
503     ifac1.insert( ifac1.end(), ttns1_face(r,r));
504     isurf1.insert( isurf1.end(), ttns1_surf(r,r));
505     }
506    
507     for(int j=0;j<nb_face2;j++)
508     {
509     MG_FACE* face2=mggeo2->get_mg_face(j);
510     MG_SURFACE*surf2=face2->get_surface();
511     int id2=face2->get_id();
512     OT_TENSEUR tns2_face(4),tns2_surf(4);
513     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
514     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
515     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
516     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
517     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
518     ttns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
519     ttns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
520     vector<double2> ifac2; vector<double2> isurf2;
521     for(int r=0;r<4;r++)
522     {
523     ifac2.insert( ifac2.end(), ttns2_face(r,r));
524     isurf2.insert( isurf2.end(), ttns2_surf(r,r));
525     }
526     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
527     {
528     if(tns1_face.est_til_equivalent(tns2_face))
529     {
530     if(tns1_surf.est_til_equivalent(tns2_surf))
531     {
532     similarite.ajouter(id1);
533     similarite.ajouter(id2);
534     vector<unsigned int> indx1,indx2;
535     if(ttns1_face.listes_equivalentes(ifac1,ifac2,indx1))
536     {
537     if(ttns1_face.listes_equivalentes(isurf1,isurf2,indx2))
538     {
539     ssimilarite.ajouter(id1) ;
540     ssimilarite.ajouter(id2) ;
541     //ssimilarite.insert(ssimilarite.end(),id1);
542     //ssimilarite.insert(ssimilarite.end(),id2);
543     }
544     }
545    
546     }
547     }
548    
549     }
550     }
551     }
552     break;
553     }//niveau 1
554    
555     case 2: //similarité reposant sur l'inertie
556     {
557    
558     for(int i=0;i<nb_face1; i++)
559     {
560     MG_FACE* face1=mggeo1->get_mg_face(i);
561     MG_SURFACE*surf1=face1->get_surface();
562     int id1=face1->get_id();
563     OT_TENSEUR tns1_face(4),tns1_surf(4);
564     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
565     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
566    
567     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
568     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
569     vector<double2> ifac1; vector<double2>isurf1;
570     for(int r=0;r<4;r++)
571     {
572     ifac1.insert( ifac1.end(), tns1_face(r,r));
573     isurf1.insert( isurf1.end(), tns1_surf(r,r));
574     }
575    
576 souaissa 82 for(int j=0;j<nb_face2;j++)
577     {
578    
579     MG_FACE* face2=mggeo2->get_mg_face(j);
580     MG_SURFACE*surf2=face2->get_surface();
581     int id2=face2->get_id();
582     OT_TENSEUR tns2_face(4),tns2_surf(4);
583     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
584     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
585     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
586     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
587     vector<double2> ifac2; vector<double2> isurf2;
588     for(int r=0;r<4;r++)
589     {
590     ifac2.insert( ifac2.end(), tns2_face(r,r));
591     isurf2.insert( isurf2.end(), tns2_surf(r,r));
592     }
593    
594     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
595     {
596     vector<unsigned int> indx1,indx2;
597     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
598     {
599     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
600     {
601 souaissa 87 similarite.ajouter(id1);
602     similarite.ajouter(id2);
603     // similarite.insert(similarite.end(),id1);
604     // similarite.insert(similarite.end(),id2);
605 souaissa 82 }
606     }
607     }
608    
609     }
610    
611     }
612 souaissa 87 break;
613     } //niveau 2
614 souaissa 82
615 souaissa 87 case 31: //recherche de similarité dans le prmier modele en se reposant sur l'inertie
616     {
617     for(int i=0;i<nb_face1; i++)
618     {
619     MG_FACE* face1=mggeo1->get_mg_face(i);
620     MG_SURFACE*surf1=face1->get_surface();
621     int id1=face1->get_id();
622     OT_TENSEUR tns1_face(4),tns1_surf(4);
623     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
624     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
625 souaissa 82
626 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
627     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
628     vector<double2> ifac1; vector<double2>isurf1;
629     for(int r=0;r<4;r++)
630     {
631     ifac1.insert( ifac1.end(), tns1_face(r,r));
632     isurf1.insert( isurf1.end(), tns1_surf(r,r));
633     }
634    
635     for(int j=0;j<nb_face1;j++)
636     {
637    
638     MG_FACE* face2=mggeo1->get_mg_face(j);
639     MG_SURFACE*surf2=face2->get_surface();
640     int id2=face2->get_id();
641     OT_TENSEUR tns2_face(4),tns2_surf(4);
642     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
643     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
644     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
645     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
646     vector<double2> ifac2; vector<double2> isurf2;
647     for(int r=0;r<4;r++)
648     {
649     ifac2.insert( ifac2.end(), tns2_face(r,r));
650     isurf2.insert( isurf2.end(), tns2_surf(r,r));
651     }
652    
653     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
654     {
655     vector<unsigned int> indx1,indx2;
656     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
657     {
658     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
659     {
660     similarite.ajouter(id1);
661     similarite.ajouter(id2);
662     // similarite.insert(similarite.end(),id1);
663     // similarite.insert(similarite.end(),id2);
664     }
665     }
666     }
667    
668     }
669    
670     }
671    
672     break;
673     }//niveau 31
674     case 32: //recherche de similarite dams le second modele en se reposant sur l'inertie
675     {
676     for(int i=0;i<nb_face2; i++)
677     {
678     MG_FACE* face1=mggeo2->get_mg_face(i);
679     MG_SURFACE*surf1=face1->get_surface();
680     int id1=face1->get_id();
681     OT_TENSEUR tns1_face(4),tns1_surf(4);
682     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
683     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
684    
685     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
686     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
687     vector<double2> ifac1; vector<double2>isurf1;
688     for(int r=0;r<4;r++)
689     {
690     ifac1.insert( ifac1.end(), tns1_face(r,r));
691     isurf1.insert( isurf1.end(), tns1_surf(r,r));
692     }
693    
694     for(int j=0;j<nb_face2;j++)
695     {
696    
697     MG_FACE* face2=mggeo2->get_mg_face(j);
698     MG_SURFACE*surf2=face2->get_surface();
699     int id2=face2->get_id();
700     OT_TENSEUR tns2_face(4),tns2_surf(4);
701     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
702     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
703     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
704     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
705     vector<double2> ifac2; vector<double2> isurf2;
706     for(int r=0;r<4;r++)
707     {
708     ifac2.insert( ifac2.end(), tns2_face(r,r));
709     isurf2.insert( isurf2.end(), tns2_surf(r,r));
710     }
711    
712     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
713     {
714     vector<unsigned int> indx1,indx2;
715     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
716     {
717     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
718     {
719     similarite.ajouter(id1);
720     similarite.ajouter(id2);
721     // similarite.insert(similarite.end(),id1);
722     // similarite.insert(similarite.end(),id2);
723     }
724     }
725     }
726    
727     }
728    
729     }
730    
731     break;
732     }//niveau 32
733     }//switch
734     }
735    
736    
737     TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_identitees()
738     {
739     return identite;
740     }
741    
742     TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_simalarite_vectorielle()
743     {
744     return similarite;
745     }
746    
747     TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_simalarite_inertielle()
748     {
749     return ssimilarite;
750     }
751    
752     void VCT_COMPARAISON::compare_par_rapport_face_de_reference()
753     {
754     int face_ref1;
755     int face_ref2;
756     TPL_LISTE_ENTITE<int> lst;
757     int nb_fsim1=similarite.get_nb()/2;
758     int nb_fsim2=ssimilarite.get_nb()/2;
759    
760     TPL_LISTE_ENTITE<int> list11;
761     TPL_LISTE_ENTITE<int> list12;
762     TPL_LISTE_ENTITE<int> list21;
763     TPL_LISTE_ENTITE<int> list22;
764     TPL_LISTE_ENTITE<int> list1_final;
765     TPL_LISTE_ENTITE<int> list2_final;
766    
767     for(int i=0;i<nb_fsim1;i++)
768     list11.ajouter(similarite.get(2*i));
769     for(int i=0;i<nb_fsim1;i++)
770     list12.ajouter(similarite.get(2*i+1));
771     for(int i=0;i<nb_fsim2;i++)
772     list21.ajouter(ssimilarite.get(2*i));
773     for(int i=0;i<nb_fsim2;i++)
774     list22.ajouter(ssimilarite.get(2*i+1));
775    
776     int c1,c2,c3,c,cc,c22;
777     int compt=0;
778     bool trouve_ref=false;
779     int pour_la_premiere_fois=1;
780     for(int i=0;i<nb_fsim1;i++)
781     {
782     int num11=list11.get(i);
783     int num12=list12.get(i);
784    
785     for(int j=0;j<nb_fsim2;j++)
786     {
787     int num21=list21.get(j);
788     int num22=list22.get(j);
789     if(num11==num21)
790     if(num12==num22)
791     {
792     list1_final.ajouter(num11);
793     list2_final.ajouter(num22);
794     if (i>0)
795     {
796    
797     if(num11==list11.get(i-1))
798     {
799     if(pour_la_premiere_fois)
800     {
801     lst.ajouter(list11.get(i-1));
802     lst.ajouter(list12.get(i-1));
803     pour_la_premiere_fois=0;
804     }
805     lst.ajouter(num11);
806     lst.ajouter(num12);
807     }
808     else
809     pour_la_premiere_fois=1;
810     }
811     compt++;
812     if(!trouve_ref)
813     {
814     if(compt==1)
815     c1=num11;
816     if(compt==2)
817     {
818     c2=num11;
819     c22= num12;
820     }
821     if(compt==3)
822     c3=num11;
823     if (compt==4)
824     {
825     if (c1!=c2&&c1!=c3&&c2!=c3)
826     {
827     c=c2;
828     cc=c22;
829     trouve_ref=true;
830     }
831     compt=0;
832     }
833    
834     break;
835     }
836    
837     }
838     }
839     }
840    
841     int nb_face1=list1_final.get_nb();
842     int nb_face2=list2_final.get_nb();
843    
844     TPL_LISTE_ENTITE<int> lst_fin;
845     this->trouve_face_de_reference(c,cc,lst,lst_fin);
846    
847    
848     TPL_LISTE_ENTITE<int> lst1,lst2;
849     int nb_face_doublant=lst_fin.get_nb()/2;
850    
851     for(int r=0;r<nb_face_doublant;r++)
852     {
853     lst1.ajouter( lst_fin.get(2*r));
854     lst2.ajouter( lst_fin.get(2*r+1));
855 souaissa 82 }
856    
857 souaissa 87 for(int i=0;i<list1_final.get_nb();i++)
858     {
859     int num1= list1_final.get(i);
860     int num2= list2_final.get(i);
861     if(!lst1.est_dans_la_liste(num1))
862     {
863     identite.ajouter(num1);
864     identite.ajouter(num2);
865     }
866     }
867 souaissa 82
868 souaissa 87 for(int r=0;r<nb_face_doublant;r++)
869     {
870     int num1= lst_fin.get(2*r);
871     int num2= lst_fin.get(2*r+1);
872     identite.ajouter(num1);
873     identite.ajouter(num2);
874     }
875 souaissa 82
876    
877    
878    
879    
880 souaissa 87 /*
881     MG_FACE* face1_ref=mggeo1->get_mg_faceid(face_ref1);
882     MG_FACE* face2_ref=mggeo2->get_mg_faceid(face_ref2);
883 souaissa 82
884    
885    
886 souaissa 87
887     MG_SURFACE*surf1_ref=face1_ref->get_surface();
888     MG_SURFACE*surf2_ref=face2_ref->get_surface();
889    
890     VCT_FACE &vctface1=(VCT_FACE&)face1_ref->get_vectorisation();
891     VCT_FACE &vctface2=(VCT_FACE&)face2_ref->get_vectorisation();
892     VCT_SURFACE &vctsurf1=(VCT_SURFACE&)surf1_ref->get_vectorisation();
893     VCT_SURFACE &vctsurf2=(VCT_SURFACE&)surf2_ref->get_vectorisation();
894    
895     for(int i=0;i<nb_face1; i++)
896     {
897     MG_FACE* face1=mggeo1->get_mg_face(i);
898     MG_SURFACE*surf1=face1->get_surface();
899     int id1=face1->get_id();
900     OT_TENSEUR tns1_face(4),tns1_surf(4);
901     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
902     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
903     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
904    
905     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_entite(vctface1);
906     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_entite(vctsurf1);
907    
908     for(int j=0;j<nb_face2;j++)
909     {
910     MG_FACE* face2=mggeo2->get_mg_face(j);
911     MG_SURFACE*surf2=face2->get_surface();
912     int id2=face2->get_id();
913     OT_TENSEUR tns2_face(4),tns2_surf(4);
914     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
915     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
916     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
917    
918     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_entite(vctface2);
919     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_entite(vctsurf2);
920    
921     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
922     {
923     if(tns1_face.est_til_equivalent(tns2_face))
924     {
925     if(tns1_surf.est_til_equivalent(tns2_surf))
926     {
927     similarite.ajouter(id1);
928     similarite.ajouter(id2);
929     // similarite.insert(similarite.end(),id1);
930     // similarite.insert(similarite.end(),id2);
931     }
932     }
933    
934     }
935    
936     }
937     }
938     */
939    
940    
941     }
942    
943    
944    
945    
946    
947     void VCT_COMPARAISON::affecter_les_couleurs(int niveau)
948 souaissa 66 {
949 souaissa 87 randomize();
950     int nb_face_ident=similarite.get_nb()/2;
951     int nb_face_identt=ssimilarite.get_nb()/2;
952     int nb_face_iden=identite.get_nb()/2;
953     double val;
954     TPL_LISTE_ENTITE<int> lst;
955     TPL_LISTE_ENTITE<double> lst_val;
956     int num1,num2,num1_avant ;
957     switch (niveau)
958     {
959     case 1: //pour afficher les identites entre le deux modèles
960     {
961     for(int i=0;i< nb_face_iden;i++)
962     {
963     num1=identite.get(2*i) ;
964     num2=identite.get(2*i+1) ;
965     if(i>0) num1_avant= identite.get(2*(i-1));
966     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
967     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
968    
969     if(i==0)
970     {
971     choisir_une_couleur(val);
972     while(lst_val.est_dans_la_liste(val))
973     {
974     choisir_une_couleur(val);
975     }
976     face1->ajouter_ccf("Cc",val);
977     face2->ajouter_ccf("Cc",val);
978     lst_val.ajouter(val);
979     }
980    
981     if(i>0)
982     {
983     if(num1!=num1_avant)
984     {
985     choisir_une_couleur(val);
986     while(lst_val.est_dans_la_liste(val))
987     {
988     choisir_une_couleur(val);
989     }
990     face1->ajouter_ccf("Cc",val);
991     face2->ajouter_ccf("Cc",val);
992     lst_val.ajouter(val);
993     }
994     else{
995     face2->ajouter_ccf("Cc",val);
996     }
997    
998     }
999     }
1000    
1001     gest1->enregistrer(filname1);
1002     gest2->enregistrer(filname2);
1003     break;
1004     }
1005    
1006     case 21: //pour afficher la similarite entre le deux modèle vectoriellement
1007     {
1008     for(int i=0;i< nb_face_ident;i++)
1009     {
1010     num1=similarite.get(2*i) ;
1011     num2=similarite.get(2*i+1) ;
1012     if(i!=0) num1_avant= similarite.get(2*(i-1));
1013     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
1014     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
1015    
1016     if(i==0)
1017     {
1018     choisir_une_couleur(val);
1019     face1->ajouter_ccf("Cc",val);
1020     face2->ajouter_ccf("Cc",val);
1021     }
1022    
1023     if(i>0)
1024     {
1025     if(num1!=num1_avant)
1026     {
1027     choisir_une_couleur(val);
1028     face1->ajouter_ccf("Cc",val);
1029     face2->ajouter_ccf("Cc",val);
1030     }
1031     else{
1032     face2->ajouter_ccf("Cc",val);
1033     }
1034    
1035     }
1036     }
1037    
1038     gest1->enregistrer(filname1);
1039     gest2->enregistrer(filname2);
1040     break;
1041     }
1042     case 22: //pour afficher la similarite entre le deux modèle vectoriellement
1043     {
1044     for(int i=0;i< nb_face_identt;i++)
1045     {
1046     num1=ssimilarite.get(2*i) ;
1047     num2=ssimilarite.get(2*i+1) ;
1048     if(i!=0) num1_avant= similarite.get(2*(i-1));
1049     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
1050     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
1051    
1052     if(i==0)
1053     {
1054     choisir_une_couleur(val);
1055     face1->ajouter_ccf("Cc",val);
1056     face2->ajouter_ccf("Cc",val);
1057     }
1058    
1059     if(i>0)
1060     {
1061     if(num1!=num1_avant)
1062     {
1063     choisir_une_couleur(val);
1064     face1->ajouter_ccf("Cc",val);
1065     face2->ajouter_ccf("Cc",val);
1066     }
1067     else{
1068     face2->ajouter_ccf("Cc",val);
1069     }
1070    
1071     }
1072     }
1073    
1074     gest1->enregistrer(filname1);
1075     gest2->enregistrer(filname2);
1076     break;
1077     }
1078     case 3: //pour afficher la similarite dans le premier modèle
1079     {
1080     for(int i=0;i< nb_face_ident;i++)
1081     {
1082    
1083     num1=similarite.get(2*i) ;
1084     num2=similarite.get(2*i+1) ;
1085     if(num1!=num2)lst.ajouter(num2);
1086     // int size=lst.get_nb();
1087     // int d=lst.get(i);
1088     if(i!=0)num1_avant= similarite.get(2*(i-1));
1089     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
1090     MG_FACE* face2=mggeo1->get_mg_faceid(num2);
1091     if(!lst.est_dans_la_liste(num1))
1092     {
1093     if(i==0)
1094     {
1095     choisir_une_couleur(val);
1096     face1->ajouter_ccf("Cc",val);
1097     face2->ajouter_ccf("Cc",val);
1098     }
1099    
1100     if(i>0)
1101     {
1102     if(num1!=num1_avant)
1103     {
1104     choisir_une_couleur(val);
1105     face1->ajouter_ccf("Cc",val);
1106     face2->ajouter_ccf("Cc",val);
1107     }
1108     else{
1109     face2->ajouter_ccf("Cc",val);
1110     }
1111    
1112     }
1113     }
1114     }
1115     gest1->enregistrer(filname1);
1116    
1117     break;
1118     }
1119     case 4: //pour afficher la similarite dans le second modèle
1120     {
1121     for(int i=0;i< nb_face_ident;i++)
1122     {
1123     num1=similarite.get(2*i) ;
1124     num2=similarite.get(2*i+1) ;
1125     if(i!=0)num1_avant= similarite.get(2*(i-1));
1126     MG_FACE* face1=mggeo2->get_mg_faceid(num1);
1127     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
1128    
1129     if(i==0)
1130     {
1131     choisir_une_couleur(val);
1132     face1->ajouter_ccf("Cc",val);
1133     face2->ajouter_ccf("Cc",val);
1134     }
1135    
1136     if(i>0)
1137     {
1138     if(num1!=num1_avant)
1139     {
1140     choisir_une_couleur(val);
1141     face1->ajouter_ccf("Cc",val);
1142     face2->ajouter_ccf("Cc",val);
1143     }
1144     else{
1145     face2->ajouter_ccf("Cc",val);
1146     }
1147    
1148     }
1149     }
1150    
1151    
1152     gest2->enregistrer(filname2);
1153     break;
1154     }
1155    
1156     }
1157    
1158    
1159     }
1160    
1161    
1162     void VCT_COMPARAISON::choisir_une_couleur(double& val)
1163     {
1164     randomize();
1165    
1166     unsigned char r=rand() % 255;
1167     unsigned char g=rand() % 255;
1168     unsigned char b=rand() % 255;
1169     val=0.;
1170     unsigned char* p =(unsigned char*)&val;
1171    
1172     *p=r;
1173     p++;*p=g;
1174     p++;*p=b;
1175    
1176     }
1177    
1178    
1179    
1180     void VCT_COMPARAISON::trouve_face_de_reference(int face_ref1,int face_ref2,TPL_LISTE_ENTITE<int>& list,TPL_LISTE_ENTITE<int>& lst_fin)
1181     {
1182     //int nb_face_ident1=similarite.get_nb()/2;
1183     //int nb_face_ident2=ssimilarite.get_nb()/2;
1184     int nb_face=list.get_nb()/2 ;
1185     //vector<OT_VECTEUR_4DD> vctbary1;
1186     //vector<OT_VECTEUR_4DD> vctbary2;
1187     int num1,num2 ;
1188     /*
1189     TPL_LISTE_ENTITE<int> lst1,llst1,lllst1,lst1g1g2;
1190     TPL_LISTE_ENTITE<int> lst2,llst2,lllst2,lst2g1g2;
1191    
1192    
1193     for(int i=0;i< nb_face_ident1;i++)
1194     {
1195     num1=similarite.get(2*i) ;
1196     num2=similarite.get(2*i+1) ;
1197     if(!lst1.est_dans_la_liste(num1))
1198     lst1.ajouter(num1) ;
1199     if(!lst2.est_dans_la_liste(num2))
1200     lst2.ajouter(num2) ;
1201     }
1202    
1203     for(int i=0;i< nb_face_ident2;i++)
1204     {
1205     num1=ssimilarite.get(2*i);
1206     num2=ssimilarite.get(2*i+1);
1207     if(!llst2.est_dans_la_liste(num2))
1208     llst2.ajouter(num2) ;
1209     }
1210    
1211     for(int i=0;i<lst1.get_nb();i++)
1212     {
1213     if(llst1.est_dans_la_liste(lst1.get(i)))
1214     lllst1.ajouter(lst1.get(i));
1215     }
1216     for(int i=0;i<lst2.get_nb();i++)
1217     {
1218     if(llst2.est_dans_la_liste(lst2.get(i)))
1219     lllst2.ajouter(lst2.get(i));
1220     }
1221     */
1222    
1223     OT_VECTEUR_4DD Dv,Dv1,Dv2,G1,G2,g1g2;
1224     OT_TENSEUR V(4),V1(4),V2(4);
1225     // for(int i=0;i<lllst1.get_nb();i++)
1226    
1227    
1228     /*
1229     for(int i=0;i<lllst2.get_nb();i++)
1230     {
1231     num1=lllst2.get(i);
1232     OT_VECTEUR_4DD g1;
1233     MG_FACE* face1=mggeo2->get_mg_faceid(num1);
1234     face1->get_vectorisation().calcule_axes_dinertie(Dv,V);
1235     G1= face1->get_vectorisation().calcule_barycentre();
1236     for(int r=0;r<4;r++) {
1237     for(int s=0;s<4;s++) {
1238     g1[r]= g1[r]+V(s,r)*G1[s];
1239     }
1240     }
1241    
1242     for(int j=1;j<lllst2.get_nb();j++)
1243     {
1244     num2=lllst2.get(j);
1245     OT_VECTEUR_4DD g2;
1246     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
1247     G2= face2->get_vectorisation().calcule_barycentre();
1248     for(int r=0;r<4;r++) {
1249     for(int s=0;s<4;s++) {
1250     g2[r]= g2[r]+V(s,r)*G2[s];
1251     }
1252     }
1253    
1254     g1g2=g2-g1;
1255     lst2g1g2.ajouter(num1);
1256     lst2g1g2.ajouter(num2);
1257     vctbary2.insert(vctbary2.end(),g1g2);
1258     }
1259     }
1260     */
1261     ///////////////////
1262     OT_VECTEUR_4DD g1_ref,g2_ref;
1263     MG_FACE* face1_ref=mggeo1->get_mg_faceid(face_ref1);
1264     face1_ref->get_vectorisation().calcule_axes_dinertie(Dv1,V1);
1265     G1= face1_ref->get_vectorisation().calcule_barycentre();
1266    
1267     for(int r=0;r<4;r++) {
1268     for(int s=0;s<4;s++) {
1269     g1_ref[r]= g1_ref[r]+V1(s,r)*G1[s];
1270     }
1271     }
1272    
1273    
1274     MG_FACE* face2_ref=mggeo2->get_mg_faceid(face_ref2);
1275     face2_ref->get_vectorisation().calcule_axes_dinertie(Dv2,V2);
1276     G2= face2_ref->get_vectorisation().calcule_barycentre();
1277     for(int r=0;r<4;r++) {
1278     for(int s=0;s<4;s++) {
1279     g2_ref[r]= g2_ref[r]+V2(s,r)*G2[s];
1280     }
1281     }
1282    
1283     OT_VECTEUR_4DD g1refg1,g2refg2;
1284    
1285     for(int i=0;i<nb_face;i++)
1286     {
1287     num1=list.get(2*i);
1288     OT_VECTEUR_4DD g1;
1289     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
1290     G1= face1->get_vectorisation().calcule_barycentre();
1291     for(int r=0;r<4;r++) {
1292     for(int s=0;s<4;s++) {
1293     g1[r]= g1[r]+V1(s,r)*G1[s];
1294     }
1295     }
1296    
1297     g1refg1=g1-g1_ref;
1298     num2=list.get(2*i+1);
1299     OT_VECTEUR_4DD g2;
1300     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
1301     G2= face2->get_vectorisation().calcule_barycentre();
1302     for(int r=0;r<4;r++) {
1303     for(int s=0;s<4;s++) {
1304     g2[r]= g2[r]+V2(s,r)*G2[s];
1305     }
1306     }
1307    
1308     g2refg2=g2-g2_ref;
1309     if(g1refg1==g2refg2)
1310     {
1311     lst_fin.ajouter(num1);
1312     lst_fin.ajouter(num2);
1313     }
1314     }
1315    
1316    
1317    
1318     /*
1319    
1320     int trouve=-1;
1321     TPL_LISTE_ENTITE<int> vct_ident;
1322     for(int i=0;i<vctbary1.size();i++)
1323     {
1324     OT_VECTEUR_4DD Vg1= vctbary1[i];
1325     for(int j=0;j<vctbary1.size();j++)
1326     {
1327     OT_VECTEUR_4DD Vg2= vctbary2[j];
1328     if(Vg1==Vg2)
1329     {
1330     face_ref1=lst1g1g2.get(2*i);
1331     face_ref2=lst2g1g2.get(2*j);
1332     trouve=1;
1333     break;
1334     }
1335     }
1336     if (trouve>0) break;
1337     }
1338     */
1339    
1340    
1341     }
1342    
1343    
1344    
1345     std::ostream& operator <<(std::ostream& os,const VCT_COMPARAISON& vct_cmp)
1346     {
1347     vct_cmp.enregistrer(os) ;
1348     return os;
1349     }
1350    
1351    
1352    
1353    
1354    
1355     void VCT_COMPARAISON::enregistrer(ostream& os)
1356     {
1357 souaissa 66 os<<"COMPARAISON VECTORIELLE DE DEUX GEOMETRIES"<<endl;
1358     int nb_cl=2;
1359 souaissa 87 int nb_lg=similarite.get_nb()/2;
1360 souaissa 66 os<<"FACES_PREMIERE_GEOMETRIE : ";
1361     for(int j=0;j<nb_lg;j++)
1362 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+0);
1363 souaissa 66 os<<endl;
1364     os<<"FACES_SECONDE_GEOMETRIE : ";
1365     for(int j=0;j<nb_lg;j++)
1366 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+1);
1367 souaissa 66 os<<endl;
1368    
1369 souaissa 87 //affecter_une_couleur();
1370 souaissa 82
1371    
1372 souaissa 66 }