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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     geo_ind_point_edge.cpp Type:Func
4    
5     Calcul de l indice d un point sur une edge
6    
7     Date de creation : 19-9-1997 18 :27 :20
8     Derniere version : 19-9-1997 18 :27 :20
9    
10     Vincent FRANCOIS
11    
12     *****************************************************************/
13    
14    
15    
16    
17    
18     /**************************/
19     /* include */
20     #include <stdio.h>
21     #include <string.h>
22     #include <stdlib.h>
23     #include <math.h>
24     #include "const.h"
25     #include "memoire.h"
26     #include "struct.h"
27     #include "prototype.h"
28    
29    
30    
31     /**************************/
32     /* variables globales */
33     extern struct s_acis *acis;
34    
35    
36     /**************************/
37     /* programme principal */
38    
39     float geo_ind_point_edge(struct s_edge *edge,struct s_noeud *no)
40     {
41     struct s_straight *straight;
42     struct s_ellipse *ellipse;
43     float xtmp,ytmp,ztmp,tt,vec[4],t[4];
44    
45     if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
46     {
47     straight=(struct s_straight *)acis->entity[edge->curve];
48     t[0]=no->x-straight->param->root[0];
49     t[1]=no->y-straight->param->root[1];
50     t[2]=no->z-straight->param->root[2];
51     PVEC(vec,t,straight->param->dir);
52     NORME(vec);
53     if (EGAL(vec[3],0.,0.0001))
54     {
55     if (!(EGAL(straight->param->dir[0],0.0,0.0001))) tt=t[0]/straight->param->dir[0];
56     else if (!(EGAL(straight->param->dir[1],0.0,0.0001))) tt=t[1]/straight->param->dir[1];
57     else tt=t[2]/straight->param->dir[2];
58     }
59     return(tt);
60     }
61     if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
62     {
63     ellipse=(struct s_ellipse *)acis->entity[edge->curve];
64     xtmp=ellipse->param->u[0]*(no->x-ellipse->param->centre[0])+ellipse->param->u[1]*(no->y-ellipse->param->centre[1])+ellipse->param->u[2]*(no->z-ellipse->param->centre[2]);
65     ytmp=ellipse->param->v[0]*(no->x-ellipse->param->centre[0])+ellipse->param->v[1]*(no->y-ellipse->param->centre[1])+ellipse->param->v[2]*(no->z-ellipse->param->centre[2]);
66     ztmp=ellipse->param->w[0]*(no->x-ellipse->param->centre[0])+ellipse->param->w[1]*(no->y-ellipse->param->centre[1])+ellipse->param->w[2]*(no->z-ellipse->param->centre[2]);
67     t[0]=xtmp/ellipse->param->a;
68     t[1]=ytmp/ellipse->param->b;
69     t[2]=t[0]*t[0]+t[1]*t[1];
70     if (EGAL(ztmp,0.0,0.0001))
71     if (EGAL(t[2],1.,0.0001))
72     {
73     if (t[0]<(-1.)) t[0]=(-1);
74     if (t[0]>1.) t[0]=1;
75     tt=(float)acos((double)t[0]);
76     if (t[1]<0.) tt=(-tt);
77     if (tt<0.) tt=tt+2*PI;
78     if (tt<edge->t1) tt=tt+2*PI;
79     }
80     return(tt);
81     }
82     return(tt);
83     }