ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 92
Committed: Mon May 5 22:12:19 2008 UTC (17 years ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 24174 byte(s)
Log Message:
mise a jour vct_comparaison.cpp

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.ajouter(id1);
76     similarite.ajouter(id2);
77     vector<unsigned int> indx1,indx2;
78     if(ttns1_face.listes_equivalentes(ifac1,ifac2,indx1))
79     {
80     if(ttns1_face.listes_equivalentes(isurf1,isurf2,indx2))
81     {
82     ssimilarite.ajouter(id1) ;
83     ssimilarite.ajouter(id2) ;
84     }
85     }
86    
87     }
88     }
89    
90     }
91     }
92     }
93    
94    
95 souaissa 66 }
96    
97    
98 souaissa 87 VCT_COMPARAISON::~VCT_COMPARAISON()
99 souaissa 66 {
100 souaissa 87 }
101 souaissa 66
102    
103 francois 89 void VCT_COMPARAISON::trouver_les_identites(void)
104 souaissa 87 {
105     int face_ref1;
106     int face_ref2;
107     TPL_LISTE_ENTITE<int> lst;
108 souaissa 90 compare_les_deux_geometries();
109    
110 souaissa 87 int nb_fsim1=similarite.get_nb()/2;
111     int nb_fsim2=ssimilarite.get_nb()/2;
112    
113     TPL_LISTE_ENTITE<int> list11;
114     TPL_LISTE_ENTITE<int> list12;
115     TPL_LISTE_ENTITE<int> list21;
116     TPL_LISTE_ENTITE<int> list22;
117     TPL_LISTE_ENTITE<int> list1_final;
118     TPL_LISTE_ENTITE<int> list2_final;
119    
120     for(int i=0;i<nb_fsim1;i++)
121     list11.ajouter(similarite.get(2*i));
122     for(int i=0;i<nb_fsim1;i++)
123     list12.ajouter(similarite.get(2*i+1));
124     for(int i=0;i<nb_fsim2;i++)
125     list21.ajouter(ssimilarite.get(2*i));
126     for(int i=0;i<nb_fsim2;i++)
127     list22.ajouter(ssimilarite.get(2*i+1));
128    
129     int c1,c2,c3,c,cc,c22;
130     int compt=0;
131     bool trouve_ref=false;
132     int pour_la_premiere_fois=1;
133     for(int i=0;i<nb_fsim1;i++)
134     {
135     int num11=list11.get(i);
136     int num12=list12.get(i);
137    
138     for(int j=0;j<nb_fsim2;j++)
139     {
140     int num21=list21.get(j);
141     int num22=list22.get(j);
142     if(num11==num21)
143     if(num12==num22)
144     {
145     list1_final.ajouter(num11);
146     list2_final.ajouter(num22);
147     if (i>0)
148     {
149    
150     if(num11==list11.get(i-1))
151     {
152     if(pour_la_premiere_fois)
153     {
154     lst.ajouter(list11.get(i-1));
155     lst.ajouter(list12.get(i-1));
156     pour_la_premiere_fois=0;
157     }
158     lst.ajouter(num11);
159     lst.ajouter(num12);
160     }
161     else
162     pour_la_premiere_fois=1;
163     }
164     compt++;
165     if(!trouve_ref)
166     {
167     if(compt==1)
168     c1=num11;
169     if(compt==2)
170     {
171     c2=num11;
172     c22= num12;
173     }
174     if(compt==3)
175     c3=num11;
176     if (compt==4)
177     {
178     if (c1!=c2&&c1!=c3&&c2!=c3)
179     {
180     c=c2;
181     cc=c22;
182     trouve_ref=true;
183     }
184     compt=0;
185     }
186    
187     break;
188     }
189    
190     }
191     }
192     }
193    
194     int nb_face1=list1_final.get_nb();
195     int nb_face2=list2_final.get_nb();
196    
197     TPL_LISTE_ENTITE<int> lst_fin;
198     this->trouve_face_de_reference(c,cc,lst,lst_fin);
199    
200    
201     TPL_LISTE_ENTITE<int> lst1,lst2;
202     int nb_face_doublant=lst_fin.get_nb()/2;
203    
204     for(int r=0;r<nb_face_doublant;r++)
205     {
206     lst1.ajouter( lst_fin.get(2*r));
207     lst2.ajouter( lst_fin.get(2*r+1));
208     }
209    
210     for(int i=0;i<list1_final.get_nb();i++)
211     {
212     int num1= list1_final.get(i);
213     int num2= list2_final.get(i);
214     if(!lst1.est_dans_la_liste(num1))
215     {
216     identite.ajouter(num1);
217     identite.ajouter(num2);
218     }
219     }
220    
221     for(int r=0;r<nb_face_doublant;r++)
222     {
223     int num1= lst_fin.get(2*r);
224     int num2= lst_fin.get(2*r+1);
225     identite.ajouter(num1);
226     identite.ajouter(num2);
227     }
228    
229     this->affecter_les_couleurs(1);
230    
231     }
232    
233    
234    
235     void VCT_COMPARAISON::compare_les_deux_geometries_vectoriellement()
236     {
237 souaissa 66 int nb_face1=mggeo1->get_nb_mg_face();
238     int nb_face2=mggeo2->get_nb_mg_face();
239 souaissa 87 similarite.vide();
240     for(int i=0;i<nb_face1; i++)
241     {
242     MG_FACE* face1=mggeo1->get_mg_face(i);
243     MG_SURFACE*surf1=face1->get_surface();
244     int id1=face1->get_id();
245     OT_TENSEUR tns1_face(4),tns1_surf(4);
246     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
247     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
248     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
249 souaissa 66
250 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
251     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
252 souaissa 66
253 souaissa 87 for(int j=0;j<nb_face2;j++)
254     {
255     MG_FACE* face2=mggeo2->get_mg_face(j);
256     MG_SURFACE*surf2=face2->get_surface();
257     int id2=face2->get_id();
258     OT_TENSEUR tns2_face(4),tns2_surf(4);
259     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
260     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
261     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
262     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
263     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
264 souaissa 66
265 souaissa 87 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
266     {
267     if(tns1_face.est_til_equivalent(tns2_face))
268     {
269     if(tns1_surf.est_til_equivalent(tns2_surf))
270     {
271     similarite.ajouter(id1);
272     similarite.ajouter(id2);
273     }
274     }
275     }
276     }
277     }
278     this->affecter_les_couleurs(21);
279    
280     }
281    
282     void VCT_COMPARAISON::compare_les_deux_geometries_inertiellement()
283     {
284     int nb_face1=mggeo1->get_nb_mg_face();
285     int nb_face2=mggeo2->get_nb_mg_face();
286     ssimilarite.vide();
287     for(int i=0;i<nb_face1; i++)
288     {
289     MG_FACE* face1=mggeo1->get_mg_face(i);
290     MG_SURFACE*surf1=face1->get_surface();
291     int id1=face1->get_id();
292     OT_TENSEUR tns1_face(4),tns1_surf(4);
293     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
294     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
295    
296     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
297     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
298     vector<double2> ifac1; vector<double2>isurf1;
299     for(int r=0;r<4;r++)
300     {
301     ifac1.insert( ifac1.end(), tns1_face(r,r));
302     isurf1.insert( isurf1.end(), tns1_surf(r,r));
303     }
304    
305 souaissa 66 for(int j=0;j<nb_face2;j++)
306     {
307    
308     MG_FACE* face2=mggeo2->get_mg_face(j);
309 souaissa 74 MG_SURFACE*surf2=face2->get_surface();
310 souaissa 66 int id2=face2->get_id();
311 souaissa 74 OT_TENSEUR tns2_face(4),tns2_surf(4);
312     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
313     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
314 souaissa 87 tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
315     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
316     vector<double2> ifac2; vector<double2> isurf2;
317     for(int r=0;r<4;r++)
318     {
319     ifac2.insert( ifac2.end(), tns2_face(r,r));
320     isurf2.insert( isurf2.end(), tns2_surf(r,r));
321     }
322 souaissa 66
323 souaissa 74 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
324 souaissa 66 {
325 souaissa 87 vector<unsigned int> indx1,indx2;
326     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
327 souaissa 66 {
328 souaissa 87 if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
329     {
330     ssimilarite.ajouter(id1);
331     ssimilarite.ajouter(id2);
332     }
333 souaissa 66 }
334 souaissa 87 }
335 souaissa 66
336 souaissa 87 }
337 souaissa 66
338 souaissa 87 }
339 souaissa 66
340 souaissa 90 affecter_les_couleurs(22);
341 souaissa 87 }
342    
343 souaissa 90 void VCT_COMPARAISON::compare_une_geometrie_inertiellement(int modele)
344 souaissa 87 {
345    
346 souaissa 90 MG_FILE *gst1;
347     MG_GEOMETRIE *mgeo1 ;
348     int laquelle;
349 souaissa 87
350 souaissa 90 switch(modele)
351     {
352     case 1:
353     {
354     gst1=gest1;
355     mgeo1=mggeo1;
356 souaissa 92 laquelle=31;
357 souaissa 90 break;
358     }
359     case 2:
360     {
361     gst1=gest2;
362     mgeo1=mggeo2;
363 souaissa 92 laquelle=32;
364 souaissa 90 break;
365     }
366 souaissa 87
367     }
368 souaissa 66
369 souaissa 90 int nb_face1=mgeo1->get_nb_mg_face();
370 souaissa 87 ssimilarite.vide();
371 souaissa 90 for(int i=0;i<nb_face1; i++)
372 souaissa 87 {
373 souaissa 90 MG_FACE* face1=mgeo1->get_mg_face(i);
374 souaissa 87 MG_SURFACE*surf1=face1->get_surface();
375     int id1=face1->get_id();
376     OT_TENSEUR tns1_face(4),tns1_surf(4);
377     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
378     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
379 souaissa 66
380 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
381     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
382     vector<double2> ifac1; vector<double2>isurf1;
383     for(int r=0;r<4;r++)
384     {
385     ifac1.insert( ifac1.end(), tns1_face(r,r));
386     isurf1.insert( isurf1.end(), tns1_surf(r,r));
387     }
388 souaissa 66
389 souaissa 90 for(int j=0;j<nb_face1;j++)
390 souaissa 87 {
391 souaissa 66
392 souaissa 90 MG_FACE* face2=mgeo1->get_mg_face(j);
393 souaissa 87 MG_SURFACE*surf2=face2->get_surface();
394     int id2=face2->get_id();
395     OT_TENSEUR tns2_face(4),tns2_surf(4);
396     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
397     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
398     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
399     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
400     vector<double2> ifac2; vector<double2> isurf2;
401     for(int r=0;r<4;r++)
402     {
403     ifac2.insert( ifac2.end(), tns2_face(r,r));
404     isurf2.insert( isurf2.end(), tns2_surf(r,r));
405     }
406 souaissa 66
407 souaissa 87 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
408     {
409     vector<unsigned int> indx1,indx2;
410     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
411     {
412     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
413     {
414     ssimilarite.ajouter(id1);
415     ssimilarite.ajouter(id2);
416     }
417     }
418     }
419 souaissa 66
420 souaissa 87 }
421    
422     }
423 souaissa 90 affecter_les_couleurs(laquelle);
424 souaissa 66 }
425    
426    
427    
428 souaissa 82
429 souaissa 87 TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_identitees()
430     {
431     return identite;
432     }
433    
434     TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_simalarite_vectorielle()
435     {
436     return similarite;
437     }
438    
439     TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_simalarite_inertielle()
440     {
441     return ssimilarite;
442     }
443    
444    
445     void VCT_COMPARAISON::affecter_les_couleurs(int niveau)
446 souaissa 66 {
447 souaissa 87 randomize();
448     int nb_face_ident=similarite.get_nb()/2;
449     int nb_face_identt=ssimilarite.get_nb()/2;
450     int nb_face_iden=identite.get_nb()/2;
451     double val;
452     TPL_LISTE_ENTITE<int> lst;
453     TPL_LISTE_ENTITE<double> lst_val;
454     int num1,num2,num1_avant ;
455 souaissa 90 if (niveau==1) //pour afficher les identites entre le deux modèles
456 souaissa 87 {
457     for(int i=0;i< nb_face_iden;i++)
458     {
459     num1=identite.get(2*i) ;
460     num2=identite.get(2*i+1) ;
461     if(i>0) num1_avant= identite.get(2*(i-1));
462     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
463     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
464    
465     if(i==0)
466     {
467     choisir_une_couleur(val);
468     while(lst_val.est_dans_la_liste(val))
469     {
470     choisir_une_couleur(val);
471     }
472     face1->ajouter_ccf("Cc",val);
473     face2->ajouter_ccf("Cc",val);
474     lst_val.ajouter(val);
475     }
476    
477     if(i>0)
478     {
479     if(num1!=num1_avant)
480     {
481     choisir_une_couleur(val);
482     while(lst_val.est_dans_la_liste(val))
483     {
484     choisir_une_couleur(val);
485     }
486     face1->ajouter_ccf("Cc",val);
487     face2->ajouter_ccf("Cc",val);
488     lst_val.ajouter(val);
489     }
490     else{
491     face2->ajouter_ccf("Cc",val);
492     }
493    
494     }
495     }
496    
497     }
498    
499 souaissa 92 if(niveau==21||niveau==22) //pour afficher la similarite entre le deux modèle vectoriellement ou inertiellement
500 souaissa 90 {
501     TPL_LISTE_ENTITE<int> simu;
502     if(niveau==21)simu=similarite;
503     if(niveau==22) simu=ssimilarite;
504     TPL_LISTE_ENTITE<int> llst1;
505     TPL_LISTE_ENTITE<int> llst2;
506     int nb_face_sim=simu.get_nb()/2.;
507     for(int i=0;i< nb_face_sim;i++)
508     {
509     TPL_LISTE_ENTITE<int> lst1;
510     TPL_LISTE_ENTITE<int> lst2;
511     TPL_LISTE_ENTITE<int> llst3;
512     num1=simu.get(2*i) ;
513     if(!llst1.est_dans_la_liste(num1))
514 souaissa 87 {
515 souaissa 90 num2=simu.get(2*i+1) ;
516     lst1.ajouter(num1);
517     lst2.ajouter(num2);
518     llst1.ajouter(num1);
519     llst2.ajouter(num2);
520     for(int j=1;j< nb_face_sim;j++)
521     {
522     int Num1=simu.get(2*j) ;
523     int Num2=simu.get(2*j+1) ;
524 souaissa 87
525 souaissa 90 if(num1==Num1)
526     {
527     llst3.ajouter(Num2);
528     }
529     if(num2==Num2||llst3.est_dans_la_liste(Num2))
530     {
531     if(!lst1.est_dans_la_liste(Num1)) {
532     lst1.ajouter(Num1);
533     llst1.ajouter(Num1); }
534     if(!lst2.est_dans_la_liste(Num2)) {
535     lst2.ajouter(Num2);
536     llst2.ajouter(Num2); }
537     }
538 souaissa 87
539     }
540    
541 souaissa 90 choisir_une_couleur(val);
542     while(lst_val.est_dans_la_liste(val))
543     {
544 souaissa 87 choisir_une_couleur(val);
545 souaissa 90 }
546     lst_val.ajouter(val);
547     int nb1=lst1.get_nb();
548     int nb2=lst2.get_nb();
549     for(int i=0;i<nb1;i++)
550     {
551     int n1=lst1.get(i);
552     MG_FACE* face1=mggeo1->get_mg_faceid(n1);
553     face1->ajouter_ccf("Cc",val);
554 souaissa 87 }
555 souaissa 90 for(int i=0;i<nb2;i++)
556     {
557     int n2=lst2.get(i);
558     MG_FACE* face2=mggeo2->get_mg_faceid(n2);
559     face2->ajouter_ccf("Cc",val);
560     }
561    
562     }
563     }
564 souaissa 87
565    
566     }
567    
568 souaissa 92 if(niveau== 31||niveau==32) //pour afficher la similarite dans le premier modèle ou le second modele
569 souaissa 87 {
570    
571 souaissa 90 MG_GEOMETRIE *mgeo1 ;
572     int laquelle;
573 souaissa 87
574 souaissa 90 switch(niveau)
575     {
576     case 31:
577     {
578     mgeo1=mggeo1;
579     laquelle=31;
580     break;
581 souaissa 87 }
582 souaissa 90 case 32:
583     {
584     mgeo1=mggeo2;
585     laquelle=32;
586     break;
587     }
588    
589 souaissa 87 }
590    
591 souaissa 90 for(int i=0;i< nb_face_identt;i++)
592 souaissa 87 {
593 souaissa 90 num1=ssimilarite.get(2*i) ;
594     num2=ssimilarite.get(2*i+1) ;
595 souaissa 87
596 souaissa 90 if(i>0) num1_avant= ssimilarite.get(2*(i-1));
597     MG_FACE* face1=mgeo1->get_mg_faceid(num1);
598     MG_FACE* face2=mgeo1->get_mg_faceid(num2);
599     if(!lst.est_dans_la_liste(num2))
600     {
601 souaissa 87 if(i==0)
602     {
603     choisir_une_couleur(val);
604 souaissa 90 while(lst_val.est_dans_la_liste(val))
605     {
606     choisir_une_couleur(val);
607     }
608 souaissa 87 face1->ajouter_ccf("Cc",val);
609 souaissa 90 if(num1!=num2) face2->ajouter_ccf("Cc",val); lst.ajouter(num2);
610     lst_val.ajouter(val);
611 souaissa 87 }
612    
613     if(i>0)
614     {
615     if(num1!=num1_avant)
616     {
617 souaissa 90 choisir_une_couleur(val);
618     while(lst_val.est_dans_la_liste(val))
619     {
620 souaissa 87 choisir_une_couleur(val);
621 souaissa 90 }
622     face1->ajouter_ccf("Cc",val);
623     if(num1!=num2) face2->ajouter_ccf("Cc",val); lst.ajouter(num2);
624     lst_val.ajouter(val);
625 souaissa 87 }
626     else{
627 souaissa 90 if(num1!=num2) face2->ajouter_ccf("Cc",val); lst.ajouter(num2);
628 souaissa 87 }
629    
630     }
631 souaissa 90 }
632 souaissa 87 }
633    
634    
635     }
636    
637    
638     }
639    
640    
641     void VCT_COMPARAISON::choisir_une_couleur(double& val)
642     {
643     randomize();
644    
645     unsigned char r=rand() % 255;
646     unsigned char g=rand() % 255;
647     unsigned char b=rand() % 255;
648     val=0.;
649     unsigned char* p =(unsigned char*)&val;
650    
651     *p=r;
652     p++;*p=g;
653     p++;*p=b;
654    
655     }
656    
657    
658    
659     void VCT_COMPARAISON::trouve_face_de_reference(int face_ref1,int face_ref2,TPL_LISTE_ENTITE<int>& list,TPL_LISTE_ENTITE<int>& lst_fin)
660     {
661     //int nb_face_ident1=similarite.get_nb()/2;
662     //int nb_face_ident2=ssimilarite.get_nb()/2;
663     int nb_face=list.get_nb()/2 ;
664     //vector<OT_VECTEUR_4DD> vctbary1;
665     //vector<OT_VECTEUR_4DD> vctbary2;
666     int num1,num2 ;
667     /*
668     TPL_LISTE_ENTITE<int> lst1,llst1,lllst1,lst1g1g2;
669     TPL_LISTE_ENTITE<int> lst2,llst2,lllst2,lst2g1g2;
670    
671    
672     for(int i=0;i< nb_face_ident1;i++)
673     {
674     num1=similarite.get(2*i) ;
675     num2=similarite.get(2*i+1) ;
676     if(!lst1.est_dans_la_liste(num1))
677     lst1.ajouter(num1) ;
678     if(!lst2.est_dans_la_liste(num2))
679     lst2.ajouter(num2) ;
680     }
681    
682     for(int i=0;i< nb_face_ident2;i++)
683     {
684     num1=ssimilarite.get(2*i);
685     num2=ssimilarite.get(2*i+1);
686     if(!llst2.est_dans_la_liste(num2))
687     llst2.ajouter(num2) ;
688     }
689    
690     for(int i=0;i<lst1.get_nb();i++)
691     {
692     if(llst1.est_dans_la_liste(lst1.get(i)))
693     lllst1.ajouter(lst1.get(i));
694     }
695     for(int i=0;i<lst2.get_nb();i++)
696     {
697     if(llst2.est_dans_la_liste(lst2.get(i)))
698     lllst2.ajouter(lst2.get(i));
699     }
700     */
701    
702     OT_VECTEUR_4DD Dv,Dv1,Dv2,G1,G2,g1g2;
703     OT_TENSEUR V(4),V1(4),V2(4);
704     // for(int i=0;i<lllst1.get_nb();i++)
705    
706    
707     /*
708     for(int i=0;i<lllst2.get_nb();i++)
709     {
710     num1=lllst2.get(i);
711     OT_VECTEUR_4DD g1;
712     MG_FACE* face1=mggeo2->get_mg_faceid(num1);
713     face1->get_vectorisation().calcule_axes_dinertie(Dv,V);
714     G1= face1->get_vectorisation().calcule_barycentre();
715     for(int r=0;r<4;r++) {
716     for(int s=0;s<4;s++) {
717     g1[r]= g1[r]+V(s,r)*G1[s];
718     }
719     }
720    
721     for(int j=1;j<lllst2.get_nb();j++)
722     {
723     num2=lllst2.get(j);
724     OT_VECTEUR_4DD g2;
725     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
726     G2= face2->get_vectorisation().calcule_barycentre();
727     for(int r=0;r<4;r++) {
728     for(int s=0;s<4;s++) {
729     g2[r]= g2[r]+V(s,r)*G2[s];
730     }
731     }
732    
733     g1g2=g2-g1;
734     lst2g1g2.ajouter(num1);
735     lst2g1g2.ajouter(num2);
736     vctbary2.insert(vctbary2.end(),g1g2);
737     }
738     }
739     */
740     ///////////////////
741     OT_VECTEUR_4DD g1_ref,g2_ref;
742     MG_FACE* face1_ref=mggeo1->get_mg_faceid(face_ref1);
743     face1_ref->get_vectorisation().calcule_axes_dinertie(Dv1,V1);
744     G1= face1_ref->get_vectorisation().calcule_barycentre();
745    
746     for(int r=0;r<4;r++) {
747     for(int s=0;s<4;s++) {
748     g1_ref[r]= g1_ref[r]+V1(s,r)*G1[s];
749     }
750     }
751    
752    
753     MG_FACE* face2_ref=mggeo2->get_mg_faceid(face_ref2);
754     face2_ref->get_vectorisation().calcule_axes_dinertie(Dv2,V2);
755     G2= face2_ref->get_vectorisation().calcule_barycentre();
756     for(int r=0;r<4;r++) {
757     for(int s=0;s<4;s++) {
758     g2_ref[r]= g2_ref[r]+V2(s,r)*G2[s];
759     }
760     }
761    
762     OT_VECTEUR_4DD g1refg1,g2refg2;
763    
764     for(int i=0;i<nb_face;i++)
765     {
766     num1=list.get(2*i);
767     OT_VECTEUR_4DD g1;
768     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
769     G1= face1->get_vectorisation().calcule_barycentre();
770     for(int r=0;r<4;r++) {
771     for(int s=0;s<4;s++) {
772     g1[r]= g1[r]+V1(s,r)*G1[s];
773     }
774     }
775    
776     g1refg1=g1-g1_ref;
777     num2=list.get(2*i+1);
778     OT_VECTEUR_4DD g2;
779     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
780     G2= face2->get_vectorisation().calcule_barycentre();
781     for(int r=0;r<4;r++) {
782     for(int s=0;s<4;s++) {
783     g2[r]= g2[r]+V2(s,r)*G2[s];
784     }
785     }
786    
787     g2refg2=g2-g2_ref;
788     if(g1refg1==g2refg2)
789     {
790     lst_fin.ajouter(num1);
791     lst_fin.ajouter(num2);
792     }
793     }
794    
795    
796    
797     /*
798    
799     int trouve=-1;
800     TPL_LISTE_ENTITE<int> vct_ident;
801     for(int i=0;i<vctbary1.size();i++)
802     {
803     OT_VECTEUR_4DD Vg1= vctbary1[i];
804     for(int j=0;j<vctbary1.size();j++)
805     {
806     OT_VECTEUR_4DD Vg2= vctbary2[j];
807     if(Vg1==Vg2)
808     {
809     face_ref1=lst1g1g2.get(2*i);
810     face_ref2=lst2g1g2.get(2*j);
811     trouve=1;
812     break;
813     }
814     }
815     if (trouve>0) break;
816     }
817     */
818    
819    
820     }
821    
822    
823    
824     std::ostream& operator <<(std::ostream& os,const VCT_COMPARAISON& vct_cmp)
825     {
826     vct_cmp.enregistrer(os) ;
827     return os;
828     }
829    
830    
831    
832    
833    
834     void VCT_COMPARAISON::enregistrer(ostream& os)
835     {
836 souaissa 66 os<<"COMPARAISON VECTORIELLE DE DEUX GEOMETRIES"<<endl;
837     int nb_cl=2;
838 souaissa 87 int nb_lg=similarite.get_nb()/2;
839 souaissa 66 os<<"FACES_PREMIERE_GEOMETRIE : ";
840     for(int j=0;j<nb_lg;j++)
841 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+0);
842 souaissa 66 os<<endl;
843     os<<"FACES_SECONDE_GEOMETRIE : ";
844     for(int j=0;j<nb_lg;j++)
845 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+1);
846 souaissa 66 os<<endl;
847    
848 souaissa 87 //affecter_une_couleur();
849 souaissa 82
850    
851 souaissa 66 }