ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 89
Committed: Fri May 2 19:57:56 2008 UTC (17 years ago) by francois
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 42829 byte(s)
Log Message:
bug dans coface + restructuration de vct_compare

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