2
static const char SCCSID[]="@(#)PJ_sconics.c 4.1 94/05/22 GIE REL";
22
#define LINE2 "\n\tConic, Sph\n\tlat_1= and lat_2="
23
PROJ_HEAD(tissot, "Tissot")
25
PROJ_HEAD(murd1, "Murdoch I")
27
PROJ_HEAD(murd2, "Murdoch II")
29
PROJ_HEAD(murd3, "Murdoch III")
31
PROJ_HEAD(euler, "Euler")
33
PROJ_HEAD(pconic, "Perspective Conic")
35
PROJ_HEAD(vitk1, "Vitkovsky I")
37
/* get common factors for simple conics */
39
phi12(PJ *P, double *del) {
43
if (!pj_param(P->params, "tlat_1").i ||
44
!pj_param(P->params, "tlat_2").i) {
47
p1 = pj_param(P->params, "rlat_1").f;
48
p2 = pj_param(P->params, "rlat_2").f;
49
*del = 0.5 * (p2 - p1);
50
P->sig = 0.5 * (p2 + p1);
51
err = (fabs(*del) < EPS || fabs(P->sig) < EPS) ? -42 : 0;
56
FORWARD(s_forward); /* spheroid */
61
rho = P->rho_c + tan(P->sig - lp.phi);
64
rho = P->c2 * (P->c1 - tan(lp.phi));
67
rho = P->rho_c - lp.phi;
70
xy.x = rho * sin( lp.lam *= P->n );
71
xy.y = P->rho_0 - rho * cos(lp.lam);
74
INVERSE(s_inverse); /* ellipsoid & spheroid */
77
rho = hypot(xy.x, xy.y = P->rho_0 - xy.y);
83
lp.lam = atan2(xy.x, xy.y) / P->n;
86
lp.phi = atan(P->c1 - rho / P->c2) + P->sig;
89
lp.phi = P->sig - atan(rho - P->rho_c);
92
lp.phi = P->rho_c - rho;
96
FREEUP; if (P) pj_dalloc(P); }
102
if( (i = phi12(P, &del)) )
108
P->rho_c = P->n / cs + cs / P->n;
109
P->rho_0 = sqrt((P->rho_c - 2 * sin(P->phi0))/P->n);
112
P->rho_c = sin(del)/(del * tan(P->sig)) + P->sig;
113
P->rho_0 = P->rho_c - P->phi0;
117
P->rho_c = (cs = sqrt(cos(del))) / tan(P->sig);
118
P->rho_0 = P->rho_c + tan(P->sig - P->phi0);
119
P->n = sin(P->sig) * cs;
122
P->rho_c = del / (tan(P->sig) * tan(del)) + P->sig;
123
P->rho_0 = P->rho_c - P->phi0;
124
P->n = sin(P->sig) * sin(del) * tan(del) / (del * del);
127
P->n = sin(P->sig) * sin(del) / del;
129
P->rho_c = del / (tan(del) * tan(P->sig)) + P->sig;
130
P->rho_0 = P->rho_c - P->phi0;
135
P->c1 = 1./tan(P->sig);
136
if (fabs(del = P->phi0 - P->sig) - EPS10 >= HALFPI)
138
P->rho_0 = P->c2 * (P->c1 - tan(del));
141
P->n = (cs = tan(del)) * sin(P->sig) / del;
142
P->rho_c = del / (cs * tan(P->sig)) + P->sig;
143
P->rho_0 = P->rho_c - P->phi0;
151
ENTRY0(euler) P->type = EULER; ENDENTRY(setup(P))
152
ENTRY0(tissot) P->type = TISSOT; ENDENTRY(setup(P))
153
ENTRY0(murd1) P->type = MURD1; ENDENTRY(setup(P))
154
ENTRY0(murd2) P->type = MURD2; ENDENTRY(setup(P))
155
ENTRY0(murd3) P->type = MURD3; ENDENTRY(setup(P))
156
ENTRY0(pconic) P->type = PCONIC; ENDENTRY(setup(P))
157
ENTRY0(vitk1) P->type = VITK1; ENDENTRY(setup(P))