ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/acismesh/m3d_cal_qual.cpp
Revision: 1
Committed: Mon Jun 11 22:53:07 2007 UTC (17 years, 11 months ago)
File size: 2768 byte(s)
Log Message:

File Contents

# Content
1 /*****************************************************************
2
3 m3d_cal_qual.cpp Type:Func
4
5 Calcul de la qualite 3D
6
7 Date de creation : 9-9-1997 11 :6 :23
8 Derniere version : 9-9-1997 11 :6 :23
9
10 Vincent FRANCOIS
11
12 *****************************************************************/
13
14
15
16
17
18 /**************************/
19 /* include */
20 #include <stdio.h>
21 #include <math.h>
22 #include "const.h"
23 #include "struct.h"
24 #include "memoire.h"
25 #include "prototype.h"
26
27 /**************************/
28 /* variables globales */
29 extern struct environnement env;
30 extern struct s_mesh *mesh;
31
32
33
34 /**************************/
35 /* programme principal */
36
37 float m3d_cal_qual(int n1,int n2,int n3,int n4)
38 {
39 struct s_noeud *no1,*no2,*no3,*no4;
40 float x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,crits;
41 double ab[4],ac[4],cb[4],dac,dab,dcb,dmax,crit;
42 double db[4],da[4],dc[4],dda,ddb,ddc,pvec[4],vol,som;
43
44 no1=ADRESSE(n1,noeud,mesh->);
45 no2=ADRESSE(n2,noeud,mesh->);
46 no3=ADRESSE(n3,noeud,mesh->);
47 no4=ADRESSE(n4,noeud,mesh->);
48 x1=no1->x;y1=no1->y;z1=no1->z;
49 x2=no2->x;y2=no2->y;z2=no2->z;
50 x3=no3->x;y3=no3->y;z3=no3->z;
51 x4=no4->x;y4=no4->y;z4=no4->z;
52 ab[0]=x2-x1;ab[1]=y2-y1;ab[2]=z2-z1;
53 ac[0]=x3-x1;ac[1]=y3-y1;ac[2]=z3-z1;
54 cb[0]=x2-x3;cb[1]=y2-y3;cb[2]=z2-z3;
55 db[0]=x2-x4;db[1]=y2-y4;db[2]=z2-z4;
56 da[0]=x1-x4;da[1]=y1-y4;da[2]=z1-z4;
57 dc[0]=x3-x4;dc[1]=y3-y4;dc[2]=z3-z4;
58 dab=sqrt(ab[0]*ab[0]+ab[1]*ab[1]+ab[2]*ab[2]);
59 dac=sqrt(ac[0]*ac[0]+ac[1]*ac[1]+ac[2]*ac[2]);
60 dcb=sqrt(cb[0]*cb[0]+cb[1]*cb[1]+cb[2]*cb[2]);
61 ddb=sqrt(db[0]*db[0]+db[1]*db[1]+db[2]*db[2]);
62 dda=sqrt(da[0]*da[0]+da[1]*da[1]+da[2]*da[2]);
63 ddc=sqrt(dc[0]*dc[0]+dc[1]*dc[1]+dc[2]*dc[2]);
64 dmax=dab;
65 if (dac>dmax)dmax=dac;
66 if (dcb>dmax)dmax=dcb;
67 if (ddb>dmax)dmax=ddb;
68 if (dda>dmax)dmax=dda;
69 if (ddc>dmax)dmax=ddc;
70 PVEC(pvec,ab,ac);
71 vol=pvec[0]*da[0]+pvec[1]*da[1]+pvec[2]*da[2];
72 if (vol>0.) return(0.);
73 vol=fabs(vol);
74 NORME(pvec);
75 som=pvec[3]/2.;
76 PVEC(pvec,ab,da);
77 NORME(pvec);
78 som=som+pvec[3]/2.;
79 PVEC(pvec,ac,dc);
80 NORME(pvec);
81 som=som+pvec[3]/2.;
82 PVEC(pvec,cb,db);
83 NORME(pvec);
84 som=som+pvec[3]/2.;
85 crit = vol/som ;
86 crit = (crit/dmax)/0.408249 ;
87 crits=(float)crit;
88 return(crits) ;
89 }