40 #define _USE_MATH_DEFINES // Enable windows compatibility 47 static double sn[6] = {
48 -2.99181919401019853726E3,
49 7.08840045257738576863E5,
50 -6.29741486205862506537E7,
51 2.54890880573376359104E9,
52 -4.42979518059697779103E10,
53 3.18016297876567817986E11,
55 static double sd[6] = {
57 2.81376268889994315696E2,
58 4.55847810806532581675E4,
59 5.17343888770096400730E6,
60 4.19320245898111231129E8,
61 2.24411795645340920940E10,
62 6.07366389490084639049E11,
66 static double cn[6] = {
67 -4.98843114573573548651E-8,
68 9.50428062829859605134E-6,
69 -6.45191435683965050962E-4,
70 1.88843319396703850064E-2,
71 -2.05525900955013891793E-1,
72 9.99999999999999998822E-1,
74 static double cd[7] = {
75 3.99982968972495980367E-12,
76 9.15439215774657478799E-10,
77 1.25001862479598821474E-7,
78 1.22262789024179030997E-5,
79 8.68029542941784300606E-4,
80 4.12142090722199792936E-2,
81 1.00000000000000000118E0,
85 static double fn[10] = {
86 4.21543555043677546506E-1,
87 1.43407919780758885261E-1,
88 1.15220955073585758835E-2,
89 3.45017939782574027900E-4,
90 4.63613749287867322088E-6,
91 3.05568983790257605827E-8,
92 1.02304514164907233465E-10,
93 1.72010743268161828879E-13,
94 1.34283276233062758925E-16,
95 3.76329711269987889006E-20,
97 static double fd[10] = {
99 7.51586398353378947175E-1,
100 1.16888925859191382142E-1,
101 6.44051526508858611005E-3,
102 1.55934409164153020873E-4,
103 1.84627567348930545870E-6,
104 1.12699224763999035261E-8,
105 3.60140029589371370404E-11,
106 5.88754533621578410010E-14,
107 4.52001434074129701496E-17,
108 1.25443237090011264384E-20,
112 static double gn[11] = {
113 5.04442073643383265887E-1,
114 1.97102833525523411709E-1,
115 1.87648584092575249293E-2,
116 6.84079380915393090172E-4,
117 1.15138826111884280931E-5,
118 9.82852443688422223854E-8,
119 4.45344415861750144738E-10,
120 1.08268041139020870318E-12,
121 1.37555460633261799868E-15,
122 8.36354435630677421531E-19,
123 1.86958710162783235106E-22,
125 static double gd[11] = {
127 1.47495759925128324529E0,
128 3.37748989120019970451E-1,
129 2.53603741420338795122E-2,
130 8.14679107184306179049E-4,
131 1.27545075667729118702E-5,
132 1.04314589657571990585E-7,
133 4.60680728146520428211E-10,
134 1.10273215066240270757E-12,
135 1.38796531259578871258E-15,
136 8.39158816283118707363E-19,
137 1.86958710162783236342E-22,
141 static double polevl(
double x,
double* coef,
int n )
152 ans = ans * x + *p++;
159 static double p1evl(
double x,
double* coef,
int n )
170 ans = ans * x + *p++;
178 static void fresnel(
double xxa,
double *ssa,
double *cca )
180 double f, g,
cc, ss, c, s, t, u;
192 else if ( x > 36974.0 )
210 cc = 0.5 + (f * s - g * c) / t;
211 ss = 0.5 - (f * c + g * s) / t;
234 void odrSpiral(
double s,
double cDot,
double *x,
double *y,
double *t )
238 a = 1.0 / sqrt( fabs( cDot ) );
249 *t = s * s * cDot * 0.5;
static double p1evl(double x, double *coef, int n)
static void fresnel(double xxa, double *ssa, double *cca)
static double polevl(double x, double *coef, int n)
void odrSpiral(double s, double cDot, double *x, double *y, double *t)
compute the actual "standard" spiral, starting with curvature 0