-
Notifications
You must be signed in to change notification settings - Fork 0
/
elliptic.h
77 lines (72 loc) · 2.81 KB
/
elliptic.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*============================================================================
* Daniel J. Greenhoe
*============================================================================*/
/*=====================================
* defines
*=====================================*/
/*=====================================
* classes
*=====================================*/
//-----------------------------------------------------------------------------
//! \brief Ellipse with parameters (a,b), phi, and (xo,yo) where (x,y) is all the points in R^2
//! defined by
//! x^2 y^2
//! --- + --- = 1
//! a^2 b^2
//! rotated in R^2 by <phi> radians and offset by (xo+yo)
//------------------------------------------------------------------------------
class ellipsec{
private:
double a,b,phi,xo,yo;
public:
ellipsec( const double aa, const double bb ){ a=aa; b=bb; phi=0; xo=0; yo=0; }
ellipsec( const double aa, const double bb, const double pp, const double xx, const double yy)
{
a = aa;
b = bb;
phi = pp;
xo = xx;
yo = yy;
}
ellipsec(void)
{
a = 1;
b = 1;
phi = 0;
xo = 0;
yo = 0;
}
void set( const double aa, const double bb, const double pp, const double xx, const double yy )
{
a = aa;
b = bb;
phi = pp;
xo = xx;
yo = yy;
}
void set( const double u, const double v){a=u; b=v;}
void set( const double aa, const double bb, const double pp){a=aa; b=bb; phi=pp;} //set parameters
void seta( const double aa){ a = aa; }
void setb( const double bb){ b = bb; }
void setphi(const double pp){ phi = pp; }
double geta(void){ return a ; }
double getb(void){ return b ; }
double getphi(void){ return phi; }
double estimate(void);
double x(const double theta);
double y(const double theta);
vectR2 xy(const double theta);
double pathlength(const double ta, const double tb, const long N);
double perimeter(const long N){ return 4*pathlength( 0, M_PI/2, N ); }
int findt_dfroms( const double s, const double targetd, const int direction, const long N, double *t, double *errord);
int setab_givenxyb( const double x, const double y, const double bb);
int setab_givenxya( const double x, const double y, const double aa);
int tgivenxy( const double x, const double y, double *t);
int setab_givenxyb( const vectR2 p, const double bb );
int setab_givenxya( const vectR2 p, const double aa );
int tgivenxy( const vectR2 p, double *t );
vectR2 normalize( const vectR2 p );
};
//typedef vectR2 (*fncttype)(double,double,double);
typedef vectR2 (*fncttype)(double);
extern double metric_balloon(const vectR2 p, const vectR2 q);