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

File Contents

# Content
1 /*****************************************************************
2
3 m2d_int_triangle.c Type:Func
4
5 un point est il dans le triangle
6
7 Date de creation : Wed May 1 18:21:18 1996
8
9 Derniere version : Tue Apr 22 12:25:16 1997
10
11
12
13
14 Vincent FRANCOIS
15
16 *****************************************************************/
17
18
19
20
21
22 /**************************/
23 /* include */
24 #include <stdio.h>
25 #include <math.h>
26 #include "const.h"
27 #include "memoire.h"
28 #include "struct.h"
29 #include "prototype.h"
30
31 /**************************/
32 /* variables globales */
33 extern struct environnement env;
34 extern struct s_mesh *mesh;
35
36
37
38
39 /**************************/
40 /* programme principal */
41
42 int m2d_int_triangle(int n1,int n2,int n3,int n)
43 {
44 struct s_noeud *ac_no1,*ac_no2,*ac_no3,*ac_no;
45 float u1,u2,u3,u4,v1,v2,v3,v4;
46 float eps,delta,du,dv;
47 float xsi,eta;
48
49
50 ac_no1=ADRESSE(n1,noeud,mesh->);
51 ac_no2=ADRESSE(n2,noeud,mesh->);
52 ac_no3=ADRESSE(n3,noeud,mesh->);
53 ac_no=ADRESSE(n,noeud,mesh->);
54 if (mesh->rev_u!=0.) du=0.5*mesh->rev_u-ac_no1->u; else du=0.;
55 if (mesh->rev_v!=0.) dv=0.5*mesh->rev_v-ac_no1->v; else dv=0.;
56 eval_decale(&u1,du,ac_no1->u,U);
57 eval_decale(&v1,dv,ac_no1->v,V);
58 eval_decale(&u2,du,ac_no2->u,U);
59 eval_decale(&v2,dv,ac_no2->v,V);
60 eval_decale(&u3,du,ac_no3->u,U);
61 eval_decale(&v3,dv,ac_no3->v,V);
62 eval_decale(&u4,du,ac_no->u,U);
63 eval_decale(&v4,dv,ac_no->v,V);
64 eps=0.0001;
65 delta=(u2-u1)*(v3-v1)-(v2-v1)*(u3-u1);
66 if (EGAL(delta,0.0,eps)) return(0);
67 xsi=1.0/delta*((v3-v1)*(u4-u1)-(u3-u1)*(v4-v1));
68 eta=1.0/delta*((u2-u1)*(v4-v1)-(v2-v1)*(u4-u1));
69 if((eta > eps) && (xsi > eps) && ((eta+xsi) < 1.0-eps)) return(1);
70 else return(0);
71
72
73
74 }