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

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