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

# Content
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 }