diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 1999-03-18 16:34:52 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 1999-03-18 16:34:52 +0000 |
| commit | 565a4bd035b9d4a83955808efef20f1d8dfa24cf (patch) | |
| tree | 75785fc897708023f1ccdaf40079afcbaaf0fd3a /src/geod_inv.c | |
| download | PROJ-565a4bd035b9d4a83955808efef20f1d8dfa24cf.tar.gz PROJ-565a4bd035b9d4a83955808efef20f1d8dfa24cf.zip | |
New
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@776 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'src/geod_inv.c')
| -rw-r--r-- | src/geod_inv.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/geod_inv.c b/src/geod_inv.c new file mode 100644 index 00000000..f41d58af --- /dev/null +++ b/src/geod_inv.c @@ -0,0 +1,59 @@ +#ifndef lint +static const char SCCSID[]="@(#)geod_inv.c 4.5 95/09/23 GIE REL"; +#endif +# include "projects.h" +# include "geodesic.h" +# define DTOL 1e-12 + void +geod_inv(void) { + double th1,th2,thm,dthm,dlamm,dlam,sindlamm,costhm,sinthm,cosdthm, + sindthm,L,E,cosd,d,X,Y,T,sind,tandlammp,u,v,D,A,B; + + if (ellipse) { + th1 = atan(onef * tan(phi1)); + th2 = atan(onef * tan(phi2)); + } else { + th1 = phi1; + th2 = phi2; + } + thm = .5 * (th1 + th2); + dthm = .5 * (th2 - th1); + dlamm = .5 * ( dlam = adjlon(lam2 - lam1) ); + if (fabs(dlam) < DTOL && fabs(dthm) < DTOL) { + al12 = al21 = S = 0.; + return; + } + sindlamm = sin(dlamm); + costhm = cos(thm); sinthm = sin(thm); + cosdthm = cos(dthm); sindthm = sin(dthm); + L = sindthm * sindthm + (cosdthm * cosdthm - sinthm * sinthm) + * sindlamm * sindlamm; + d = acos(cosd = 1 - L - L); + if (ellipse) { + E = cosd + cosd; + sind = sin( d ); + Y = sinthm * cosdthm; + Y *= (Y + Y) / (1. - L); + T = sindthm * costhm; + T *= (T + T) / L; + X = Y + T; + Y -= T; + T = d / sind; + D = 4. * T * T; + A = D * E; + B = D + D; + S = a * sind * (T - f4 * (T * X - Y) + + f64 * (X * (A + (T - .5 * (A - E)) * X) - + Y * (B + E * Y) + D * X * Y)); + tandlammp = tan(.5 * (dlam - .25 * (Y + Y - E * (4. - X)) * + (f2 * T + f64 * (32. * T - (20. * T - A) + * X - (B + 4.) * Y)) * tan(dlam))); + } else { + S = a * d; + tandlammp = tan(dlamm); + } + u = atan2(sindthm , (tandlammp * costhm)); + v = atan2(cosdthm , (tandlammp * sinthm)); + al12 = adjlon(TWOPI + v - u); + al21 = adjlon(TWOPI - v - u); +} |
