bonne.c 661 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include <u.h>
  2. #include <libc.h>
  3. #include "map.h"
  4. static struct coord stdpar;
  5. static double r0;
  6. static
  7. Xbonne(struct place *place, double *x, double *y)
  8. {
  9. double r, alpha;
  10. r = r0 - place->nlat.l;
  11. if(r<.001)
  12. if(fabs(stdpar.c)<1e-10)
  13. alpha = place->wlon.l;
  14. else if(fabs(place->nlat.c)==0)
  15. alpha = 0;
  16. else
  17. alpha = place->wlon.l/(1+
  18. stdpar.c*stdpar.c*stdpar.c/place->nlat.c/3);
  19. else
  20. alpha = place->wlon.l * place->nlat.c / r;
  21. *x = - r*sin(alpha);
  22. *y = - r*cos(alpha);
  23. return(1);
  24. }
  25. proj
  26. bonne(double par)
  27. {
  28. if(fabs(par*RAD) < .01)
  29. return(Xsinusoidal);
  30. deg2rad(par, &stdpar);
  31. r0 = stdpar.c/stdpar.s + stdpar.l;
  32. return(Xbonne);
  33. }