From 1760dafbabb12a6486a928c8d5e8a376a2fe5271 Mon Sep 17 00:00:00 2001 From: Kurt Schwehr Date: Thu, 3 May 2018 22:59:30 -0700 Subject: Minor cleanup of pj_phi2.c - tabs -> spaces - IWYU - #define -> static const typed - Combine definition and initialization - Define one var per statement - Use the defined symbol rather than embedding bare literals -18 -> PJD_ERR_NON_CON_INV_PHI2 Subset of fixes discussed in #971 --- src/pj_phi2.c | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/pj_phi2.c b/src/pj_phi2.c index 00b73f70..5f73d510 100644 --- a/src/pj_phi2.c +++ b/src/pj_phi2.c @@ -1,28 +1,30 @@ -/* determine latitude angle phi-2 */ +/* Determine latitude angle phi-2. */ + +#include + #include "projects.h" -#define TOL 1.0e-10 -#define N_ITER 15 +static const double TOL = 1.0e-10; +static const int N_ITER = 15; + +double pj_phi2(projCtx ctx, double ts, double e) { + double eccnth = .5 * e; + double Phi = M_HALFPI - 2. * atan(ts); + double con; + int i = N_ITER; + + for(;;) { + con = e * sin(Phi); + double dphi = M_HALFPI - 2. * atan(ts * pow((1. - con) / + (1. + con), eccnth)) - Phi; - double -pj_phi2(projCtx ctx, double ts, double e) { - double eccnth, Phi, con; - int i; + Phi += dphi; - eccnth = .5 * e; - Phi = M_HALFPI - 2. * atan (ts); - i = N_ITER; - for(;;) { - double dphi; - con = e * sin (Phi); - dphi = M_HALFPI - 2. * atan (ts * pow((1. - con) / - (1. + con), eccnth)) - Phi; - Phi += dphi; - if( fabs(dphi) > TOL && --i ) - continue; - break; - } - if (i <= 0) - pj_ctx_set_errno( ctx, -18 ); - return Phi; + if (fabs(dphi) > TOL && --i) + continue; + break; + } + if (i <= 0) + pj_ctx_set_errno(ctx, PJD_ERR_NON_CON_INV_PHI2); + return Phi; } -- cgit v1.2.3 From 8e53bdeae08ef8c1a2f0dbf4921b8aa7cc41aa41 Mon Sep 17 00:00:00 2001 From: Kurt Schwehr Date: Fri, 4 May 2018 22:44:44 -0700 Subject: Add documentation to pj_phi2 by cffk@ --- src/pj_phi2.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/pj_phi2.c b/src/pj_phi2.c index b55d9690..a83302e6 100644 --- a/src/pj_phi2.c +++ b/src/pj_phi2.c @@ -7,7 +7,22 @@ static const double TOL = 1.0e-10; static const int N_ITER = 15; +/*****************************************************************************/ double pj_phi2(projCtx ctx, double ts, double e) { +/****************************************************************************** +Determine latitude angle phi-2. +Inputs: + ts = exp(-psi) where psi is the isometric latitude (dimensionless) + e = eccentricity of the ellipsoid (dimensionless) +Output: + phi = geographic latitude (radians) +Here isometric latitude is defined by + psi = log( tan(pi/4 + phi/2) * + ( (1 - e*sin(phi)) / (1 + e*sin(phi)) )^(e/2) ) + = asinh(tan(phi)) - e * atanh(e * sin(phi)) +This routine inverts this relation using the iterative scheme given +by Snyder (1987), Eqs. (7-9) - (7-11) +*******************************************************************************/ double eccnth = .5 * e; double Phi = M_HALFPI - 2. * atan(ts); double con; -- cgit v1.2.3