ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_switch2.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/diamesh/diamesh/src/m3d_switch2.cpp
File size: 1841 byte(s)
Log Message:

File Contents

# User Rev Content
1 5 #include <stdio.h>
2     #include <math.h>
3     #include "m3d_struct.h"
4     #include "m3d_const.h"
5     #include "m3d_hotes.h"
6     #include "prototype.h"
7     extern int debug ;
8     int m3d_switch2(float *coord,FACE *face,TETRAEDRE *tetra,int *numele)
9     {
10     int n1, n2, n3, n4, i;
11     float vab[3], vac[3], vn[3], norme, pvec[3],vap[3], dist, dab, dac, dref ;
12    
13     if (face->hist == 0) return(FAUX) ;
14    
15     n1 = face->n1->num ;
16     n2 = face->n2->num ;
17     n3 = face->n3->num ;
18    
19    
20     if ( (numele[4*(tetra->num)]!=n1) && (numele[4*(tetra->num)]!=n2) && (numele[4*(tetra->num)]!=n3))
21     n4 = numele[4*(tetra->num)] ;
22     else if ( (numele[4*(tetra->num) + 1]!=n1) && (numele[4*(tetra->num)+ 1]!=n2) && (numele[4*(tetra->num) + 1]!=n3))
23     n4 = numele[4*(tetra->num) + 1] ;
24     else if ( (numele[4*(tetra->num) + 2]!=n1) && (numele[4*(tetra->num) + 2]!=n2) && (numele[4*(tetra->num) + 2]!=n3))
25     n4 = numele[4*(tetra->num) + 2] ;
26     else n4 = numele[4*(tetra->num) + 3] ;
27    
28    
29     /* calcul de la normale */
30     vab[0] = coord[x(n2)] - coord[x(n1)] ;
31     vab[1] = coord[y(n2)] - coord[y(n1)] ;
32     vab[2] = coord[z(n2)] - coord[z(n1)] ;
33     dab = NORME(vab) ;
34     vac[0] = coord[x(n3)] - coord[x(n1)] ;
35     vac[1] = coord[y(n3)] - coord[y(n1)] ;
36     vac[2] = coord[z(n3)] - coord[z(n1)] ;
37     dac = NORME(vac) ;
38    
39     dref = max(dab,dac) ;
40    
41     /* calcul du critere 2 D */
42     pvec[0] = PVECX(vab,vac) ;
43     pvec[1] = PVECY(vab,vac) ;
44     pvec[2] = PVECZ(vab,vac) ;
45    
46     vn[0] = PVECX(vab,vac) ;
47     vn[1] = PVECY(vab,vac) ;
48     vn[2] = PVECZ(vab,vac) ;
49    
50     norme = NORME(vn) ;
51     for (i=0;i<3;i++) vn[i] = vn[i]/norme ;
52    
53     /* position de n4 par rapport au plan */
54    
55     /* calcul du vecteur PA */
56     vap[0] = coord[x(n4)] - coord[x(n1)] ;
57     vap[1] = coord[y(n4)] - coord[y(n1)] ;
58     vap[2] = coord[z(n4)] - coord[z(n1)] ;
59     dist = PROSCA(vap,vn) ;
60    
61     if (dist>dref*EPSILON) return(FAUX) ;
62     else return(VRAI);
63     }
64