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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     eval_cone.c Type:Func
4    
5     Calcul divers sur un cone
6    
7     Date de creation : Wed Feb 5 17:00:29 1997
8    
9     Derniere version : Fri May 23 10:10:09 1997
10    
11    
12    
13    
14    
15    
16    
17    
18    
19    
20    
21    
22    
23     Vincent FRANCOIS
24    
25     *****************************************************************/
26    
27    
28    
29    
30    
31     /**************************/
32     /* include */
33     #include <stdio.h>
34     #include <math.h>
35     #include "struct.h"
36     #include "const.h"
37     #include "prototype.h"
38    
39     /**************************/
40     /* variables globales */
41     extern struct s_acis *acis;
42    
43    
44     /**************************/
45     /* programme principal */
46    
47     float eval_cone(struct s_face *face,struct s_par_cone *param,float *u,float *v,int type,float *x,float *y,float *z,float du)
48     {
49     struct s_cone *cone;
50     float cs,sn,angle,res;
51     float un;
52     float tg;
53     float xtmp,ytmp,ztmp;
54    
55     un=1.;
56     tg=param->tg;
57    
58    
59     if (face->sense==REVERSED)
60     {
61     un=(-1.);
62     }
63    
64    
65     cone=(struct s_cone *)acis->entity[face->surface];
66    
67     if (cone->cosalph<0.)
68     {
69     un=un*(-1);
70     }
71    
72     if (type==FONCTION)
73     {
74     xtmp=(float)(param->a*(1.+un*(*v)*tg)*cos((double)(*u-du)));
75     ytmp=(float)(param->b*(1.+un*(*v)*tg)*sin((double)(*u-du)));
76     ztmp=un*param->a*(*v);
77     *x=param->centre[0]+param->u[0]*xtmp+param->v[0]*ytmp+param->w[0]*ztmp;
78     *y=param->centre[1]+param->u[1]*xtmp+param->v[1]*ytmp+param->w[1]*ztmp;
79     *z=param->centre[2]+param->u[2]*xtmp+param->v[2]*ytmp+param->w[2]*ztmp;
80     }
81    
82     if (type==DU)
83     {
84     xtmp=(float)(param->a*(1.+un*(*v)*tg)*sin((double)(*u-du)));
85     ytmp=(float)(-param->b*(1.+un*(*v)*tg)*cos((double)(*u-du)));
86     ztmp=0.;
87     *x=param->u[0]*xtmp+param->v[0]*ytmp+param->w[0]*ztmp;
88     *y=param->u[1]*xtmp+param->v[1]*ytmp+param->w[1]*ztmp;
89     *z=param->u[2]*xtmp+param->v[2]*ytmp+param->w[2]*ztmp;
90     }
91     if (type==DV)
92     {
93     xtmp=(float)(param->a*un*tg*cos((double)(*u-du)));
94     ytmp=(float)(param->b*un*tg*sin((double)(*u-du)));
95     ztmp=un*param->a;
96     *x=param->u[0]*xtmp+param->v[0]*ytmp+param->w[0]*ztmp;
97     *y=param->u[1]*xtmp+param->v[1]*ytmp+param->w[1]*ztmp;
98     *z=param->u[2]*xtmp+param->v[2]*ytmp+param->w[2]*ztmp;
99     }
100     if (type==DUU)
101     {
102     xtmp=(float)(-param->a*(1.+un*(*v)*tg)*cos((double)(*u-du)));
103     ytmp=(float)(-param->b*(1.+un*(*v)*tg)*sin((double)(*u-du)));
104     ztmp=0.;
105     *x=param->u[0]*xtmp+param->v[0]*ytmp+param->w[0]*ztmp;
106     *y=param->u[1]*xtmp+param->v[1]*ytmp+param->w[1]*ztmp;
107     *z=param->u[2]*xtmp+param->v[2]*ytmp+param->w[2]*ztmp;
108     }
109     if (type==DUV)
110     {
111     xtmp=(float)(-param->a*un*tg*sin((double)(*u-du)));
112     ytmp=(float)(param->b*un*tg*cos((double)(*u-du)));
113     ztmp=0.;
114     *x=param->u[0]*xtmp+param->v[0]*ytmp+param->w[0]*ztmp;
115     *y=param->u[1]*xtmp+param->v[1]*ytmp+param->w[1]*ztmp;
116     *z=param->u[2]*xtmp+param->v[2]*ytmp+param->w[2]*ztmp;
117     }
118     if (type==DVV)
119     {
120     *x=0.;
121     *y=0.;
122     *z=0.;
123     }
124     if (type==INVERSE)
125     {
126     xtmp=param->u[0]*(*x-param->centre[0])+param->u[1]*(*y-param->centre[1])+param->u[2]*(*z-param->centre[2]);
127     ytmp=param->v[0]*(*x-param->centre[0])+param->v[1]*(*y-param->centre[1])+param->v[2]*(*z-param->centre[2]);
128     ztmp=param->w[0]*(*x-param->centre[0])+param->w[1]*(*y-param->centre[1])+param->w[2]*(*z-param->centre[2]);
129     *v=un*(ztmp)/param->a;
130     cs=(xtmp)/(param->a*(1.+un*(*v)*tg));
131     sn=(ytmp)/(param->b*(1.+un*(*v)*tg));
132     if (cs>1) cs=1.;
133     if (cs<(-1)) cs=(-1.);
134     angle=(float)acos((double)cs);
135     if (sn<(-0.0001)) angle=(-angle);
136     if (angle<0) angle=angle+2*PI;
137     *u=angle;
138     }
139     if (type==NORMAL)
140     {
141     xtmp=un*param->a*param->b*(1+un*(*v)*tg)*cos(*u);
142     ytmp=un*param->a*param->a*(1+un*(*v)*tg)*sin(*u);
143     ztmp=un*(-param->a*param->b*tg*(1+un*(*v)*tg));
144     *x=param->u[0]*xtmp+param->v[0]*ytmp+param->w[0]*ztmp;
145     *y=param->u[1]*xtmp+param->v[1]*ytmp+param->w[1]*ztmp;
146     *z=param->u[2]*xtmp+param->v[2]*ytmp+param->w[2]*ztmp;
147     }
148     if (type==E)
149     res=(float)((1.+un*(*v)*tg)*(1.+un*(*v)*tg)*(param->a*param->a*sin((double)(*u-du))*sin((double)(*u-du))+param->b*param->b*cos((double)(*u-du))*cos((double)(*u-du))));
150     if (type==F)
151     res=(float)(cos((double)(*u-du))*sin((double)(*u-du))*un*tg*(1.+un*(*v)*tg)*(param->b*param->b-param->a*param->a));
152     if (type==G)
153     res=(float)(tg*tg*(param->a*param->a*cos((double)(*u-du))*cos((double)(*u-du))+param->b*param->b*sin((double)(*u-du))*sin((double)(*u-du)))+param->a*param->a);
154     if (type==EU)
155     res=(float)(2.*cos((double)(*u-du))*sin((double)(*u-du))*(1.+un*(*v)*tg)*(1.+un*(*v)*tg)*(param->a*param->a-param->b*param->b));
156     if (type==GV)
157     res=0.;
158     return(res);
159    
160     }