/Proj4/PJ_bacon.c

http://github.com/route-me/route-me · C · 44 lines · 43 code · 1 blank · 0 comment · 6 complexity · 370e6e8a722f3740fefc666d9639419c MD5 · raw file

  1. #ifndef lint
  2. static const char SCCSID[]="@(#)PJ_bacon.c 4.1 94/02/15 GIE REL";
  3. #endif
  4. # define HLFPI2 2.46740110027233965467
  5. # define EPS 1e-10
  6. #define PROJ_PARMS__ \
  7. int bacn; \
  8. int ortl;
  9. #define PJ_LIB__
  10. #include "projects.h"
  11. PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv.";
  12. PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv.";
  13. PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv.";
  14. FORWARD(s_forward); /* spheroid */
  15. double ax, f;
  16. xy.y = P->bacn ? HALFPI * sin(lp.phi) : lp.phi;
  17. if ((ax = fabs(lp.lam)) >= EPS) {
  18. if (P->ortl && ax >= HALFPI)
  19. xy.x = sqrt(HLFPI2 - lp.phi * lp.phi + EPS) + ax - HALFPI;
  20. else {
  21. f = 0.5 * (HLFPI2 / ax + ax);
  22. xy.x = ax - f + sqrt(f * f - xy.y * xy.y);
  23. }
  24. if (lp.lam < 0.) xy.x = - xy.x;
  25. } else
  26. xy.x = 0.;
  27. return (xy);
  28. }
  29. FREEUP; if (P) pj_dalloc(P); }
  30. ENTRY0(bacon)
  31. P->bacn = 1;
  32. P->ortl = 0;
  33. P->es = 0.; P->fwd = s_forward;
  34. ENDENTRY(P)
  35. ENTRY0(apian)
  36. P->bacn = P->ortl = 0;
  37. P->es = 0.; P->fwd = s_forward;
  38. ENDENTRY(P)
  39. ENTRY0(ortel)
  40. P->bacn = 0;
  41. P->ortl = 1;
  42. P->es = 0.; P->fwd = s_forward;
  43. ENDENTRY(P)