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

File Contents

# Content
1 /*****************************************************************
2
3 eval_mindis_face.cpp Type:Func
4
5 Calcul la distance minimum entre une entite et un point
6
7 Date de creation : 2-2-1999 10 :25 :59
8 Derniere version : 2-2-1999 10 :25 :59
9
10 Vincent FRANCOIS
11
12 *****************************************************************/
13
14
15
16
17
18 /**************************/
19 /* include */
20 #include <stdio.h>
21 #include <string.h>
22 #include <math.h>
23 #include "struct.h"
24 #include "const.h"
25 #include "prototype.h"
26
27 /**************************/
28 /* variables globales */
29 extern struct s_acis *acis;
30
31
32
33 /**************************/
34 /* programme principal */
35
36 void eval_mindis_face(struct s_face *face, float *x,float *dis, float *par)
37 {
38 float u,v,uu,vv;
39 float g0,g1;
40 int ok;
41 float um,vm,eps,ud,vd,ua,va,lu,lv;
42
43 if (face->rev_u==0.)
44 {
45 ud=face->uinf;
46 ua=face->usup;
47 }
48 else
49 {
50 ud=0.;
51 ua=face->rev_u;
52 }
53 if (face->rev_v==0.)
54 {
55 vd=face->vinf;
56 va=face->vsup;
57 }
58 else
59 {
60 vd=0.;
61 va=face->rev_v;
62 }
63 MINI(eps,0.0001*(ua-ud),0.0001*(va-vd));;
64 MAXI(lu,3.*eps,0.0001*(ua-ud));
65 MAXI(lv,3.*eps,0.0001*(va-vd));
66 ok=0;
67 do
68 {
69 um=(ud+ua)/2.;
70 vm=(vd+va)/2.;
71 u=um-eps;
72 v=vm-eps;
73 uu=um+eps;
74 vv=vm+eps;
75 g0=eval_dis_point_face(face,x,u,vm,FONCTION);
76 g1=eval_dis_point_face(face,x,uu,vm,FONCTION);
77 if (g0<g1) ua=uu;
78 else ud=u;
79 g0=eval_dis_point_face(face,x,um,v,FONCTION);
80 g1=eval_dis_point_face(face,x,um,vv,FONCTION);
81 if (g0<g1) va=vv;
82 else vd=v;
83 if ((ua-ud<lu) && (va-vd<lv) ) ok=1;
84 }
85 while (ok==0);
86 par[0]=(ua+ud)/2.;
87 par[1]=(va+vd)/2.;
88 *dis=(float)sqrt((double)eval_dis_point_face(face,x,par[0],par[1],FONCTION));
89 }