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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     eval_ellipse.c Type:Func
4    
5     Evaluation d'un poirn sur une ellipse
6    
7     Date de creation : Thu Nov 28 11:44:05 1996
8    
9     Derniere version : Tue Apr 22 11:41:27 1997
10    
11    
12    
13    
14    
15     Vincent FRANCOIS
16    
17     *****************************************************************/
18    
19    
20    
21    
22    
23     /**************************/
24     /* include */
25     #include <stdio.h>
26     #include <string.h>
27     #include <math.h>
28     #include <math.h>
29     #include "const.h"
30     #include "struct.h"
31     #include "prototype.h"
32    
33    
34     /**************************/
35     /* variables globales */
36     extern struct s_param *para;
37    
38    
39    
40     /**************************/
41     /* programme principal */
42    
43     void eval_ellipse(struct s_par_ellipse *param,float t,int type,float *coord)
44     {
45     int n;
46    
47     if (type==FONCTION)
48     {
49     coord[0]=(float)(param->centre[0]+param->u[0]*param->a*cos((double)t)+param->v[0]*param->b*sin((double)t));
50     coord[1]=(float)(param->centre[1]+param->u[1]*param->a*cos((double)t)+param->v[1]*param->b*sin((double)t));
51     coord[2]=(float)(param->centre[2]+param->u[2]*param->a*cos((double)t)+param->v[2]*param->b*sin((double)t));
52     }
53     if (type==DERIVE)
54     {
55     coord[0]=(float)(-param->u[0]*param->a*sin((double)t)+param->v[0]*param->b*cos((double)t));
56     coord[1]=(float)(-param->u[1]*param->a*sin((double)t)+param->v[1]*param->b*cos((double)t));
57     coord[2]=(float)(-param->u[2]*param->a*sin((double)t)+param->v[2]*param->b*cos((double)t));
58     }
59     if (type==DERIVE_SECONDE)
60     {
61     coord[0]=(float)(-param->u[0]*param->a*cos((double)t)-param->v[0]*param->b*sin((double)t));
62     coord[1]=(float)(-param->u[1]*param->a*cos((double)t)-param->v[1]*param->b*sin((double)t));
63     coord[2]=(float)(-param->u[2]*param->a*cos((double)t)-param->v[2]*param->b*sin((double)t));
64     }
65     if (type==ZERO_DERIVE)
66     {
67     n=0;
68     if (EGAL(param->u[0],0.,0.0001))
69     {
70     if (!(EGAL(param->v[0],0.,0.0001)))
71     {
72     coord[n]=PI/2.;
73     coord[n+1]=3.*PI/2.;
74     n=n+2;
75     }
76     }
77     else
78     {
79     coord[n]=(float)atan((double)(param->b*param->v[0]/param->a/param->u[0]));
80     if (coord[n]<0.) coord[n]=coord[n]+PI;
81     coord[n+1]=coord[n]+PI;
82     n=n+2;
83     }
84     if (EGAL(param->u[1],0.,0.0001))
85     {
86     if (!(EGAL(param->v[1],0.,0.0001)))
87     {
88     coord[n]=PI/2.;
89     coord[n+1]=3.*PI/2.;
90     n=n+2;
91     }
92     }
93     else
94     {
95     coord[n]=(float)atan((double)(param->b*param->v[1]/param->a/param->u[1]));
96     if (coord[n]<0.) coord[n]=coord[n]+PI;
97     coord[n+1]=coord[n]+PI;
98     n=n+2;
99     }
100     if (n<4)
101     if (EGAL(param->u[2],0.,0.0001))
102     {
103     if (!(EGAL(param->v[2],0.,0.0001)))
104     {
105     coord[n]=PI/2.;
106     coord[n+1]=3.*PI/2.;
107     }
108     }
109     else
110     {
111     coord[n]=(float)atan((double)(param->b*param->v[2]/param->a/param->u[2]));
112     if (coord[n]<0.) coord[n]=coord[n]+PI;
113     coord[n+1]=coord[n]+PI;
114     }
115     }
116     }