aboutsummaryrefslogtreecommitdiff
path: root/src/projections/oea.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/projections/oea.cpp')
-rw-r--r--src/projections/oea.cpp37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/projections/oea.cpp b/src/projections/oea.cpp
index cbedf0c0..61fb0647 100644
--- a/src/projections/oea.cpp
+++ b/src/projections/oea.cpp
@@ -19,15 +19,14 @@ struct pj_opaque {
static PJ_XY oea_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */
PJ_XY xy = {0.0,0.0};
struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque);
- double Az, M, N, cp, sp, cl, shz;
-
- cp = cos(lp.phi);
- sp = sin(lp.phi);
- cl = cos(lp.lam);
- Az = aatan2(cp * sin(lp.lam), Q->cp0 * sp - Q->sp0 * cp * cl) + Q->theta;
- shz = sin(0.5 * aacos(P->ctx, Q->sp0 * sp + Q->cp0 * cp * cl));
- M = aasin(P->ctx, shz * sin(Az));
- N = aasin(P->ctx, shz * cos(Az) * cos(M) / cos(M * Q->two_r_m));
+
+ const double cp = cos(lp.phi);
+ const double sp = sin(lp.phi);
+ const double cl = cos(lp.lam);
+ const double Az = aatan2(cp * sin(lp.lam), Q->cp0 * sp - Q->sp0 * cp * cl) + Q->theta;
+ const double shz = sin(0.5 * aacos(P->ctx, Q->sp0 * sp + Q->cp0 * cp * cl));
+ const double M = aasin(P->ctx, shz * sin(Az));
+ const double N = aasin(P->ctx, shz * cos(Az) * cos(M) / cos(M * Q->two_r_m));
xy.y = Q->n * sin(N * Q->two_r_n);
xy.x = Q->m * sin(M * Q->two_r_m) * cos(N) / cos(N * Q->two_r_n);
@@ -38,16 +37,16 @@ static PJ_XY oea_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
static PJ_LP oea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse */
PJ_LP lp = {0.0,0.0};
struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque);
- double N, M, xp, yp, z, Az, cz, sz, cAz;
-
- N = Q->hn * aasin(P->ctx,xy.y * Q->rn);
- M = Q->hm * aasin(P->ctx,xy.x * Q->rm * cos(N * Q->two_r_n) / cos(N));
- xp = 2. * sin(M);
- yp = 2. * sin(N) * cos(M * Q->two_r_m) / cos(M);
- cAz = cos(Az = aatan2(xp, yp) - Q->theta);
- z = 2. * aasin(P->ctx, 0.5 * hypot(xp, yp));
- sz = sin(z);
- cz = cos(z);
+
+ const double N = Q->hn * aasin(P->ctx,xy.y * Q->rn);
+ const double M = Q->hm * aasin(P->ctx,xy.x * Q->rm * cos(N * Q->two_r_n) / cos(N));
+ const double xp = 2. * sin(M);
+ const double yp = 2. * sin(N) * cos(M * Q->two_r_m) / cos(M);
+ const double Az = aatan2(xp, yp) - Q->theta;
+ const double cAz = cos(Az);
+ const double z = 2. * aasin(P->ctx, 0.5 * hypot(xp, yp));
+ const double sz = sin(z);
+ const double cz = cos(z);
lp.phi = aasin(P->ctx, Q->sp0 * cz + Q->cp0 * sz * cAz);
lp.lam = aatan2(sz * sin(Az),
Q->cp0 * cz - Q->sp0 * sz * cAz);