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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     o3d_cal_qual.cpp Type:Func
4    
5     Calcul de la qualite 3D non algebrique
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 o3d_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     vol=fabs(vol);
73     NORME(pvec);
74     som=pvec[3]/2.;
75     PVEC(pvec,ab,da);
76     NORME(pvec);
77     som=som+pvec[3]/2.;
78     PVEC(pvec,ac,dc);
79     NORME(pvec);
80     som=som+pvec[3]/2.;
81     PVEC(pvec,cb,db);
82     NORME(pvec);
83     som=som+pvec[3]/2.;
84     crit = vol/som ;
85     crit = (crit/dmax)/0.408249 ;
86     crits=(float)crit;
87     return(crits) ;
88     }