1 #define PJ_LIB__
2 #include <math.h>
3 
4 #include "proj.h"
5 #include "proj_internal.h"
6 
7 PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl, no inv, Sph";
8 # define NITER	20
9 # define EPS	1e-7
10 # define FXC	2.00276
11 # define FXC2	1.11072
12 # define FYC	0.49931
13 
14 
boggs_s_forward(PJ_LP lp,PJ * P)15 static PJ_XY boggs_s_forward (PJ_LP lp, PJ *P) {           /* Spheroidal, forward */
16     PJ_XY xy = {0.0,0.0};
17     double theta, th1, c;
18     int i;
19     (void) P;
20 
21     theta = lp.phi;
22     if (fabs(fabs(lp.phi) - M_HALFPI) < EPS)
23         xy.x = 0.;
24     else {
25         c = sin(theta) * M_PI;
26         for (i = NITER; i; --i) {
27             th1 = (theta + sin(theta) - c) / (1. + cos(theta));
28             theta -= th1;
29             if (fabs(th1) < EPS) break;
30         }
31         theta *= 0.5;
32         xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta));
33     }
34     xy.y = FYC * (lp.phi + M_SQRT2 * sin(theta));
35     return (xy);
36 }
37 
38 
39 
PROJECTION(boggs)40 PJ *PROJECTION(boggs) {
41     P->es = 0.;
42     P->fwd = boggs_s_forward;
43     return P;
44 }
45