mollweide.c 431 B

12345678910111213141516171819202122232425
  1. #include <u.h>
  2. #include <libc.h>
  3. #include "map.h"
  4. static int
  5. Xmollweide(struct place *place, double *x, double *y)
  6. {
  7. double z;
  8. double w;
  9. z = place->nlat.l;
  10. if(fabs(z)<89.9*RAD)
  11. do { /*newton for 2z+sin2z=pi*sin(lat)*/
  12. w = (2*z+sin(2*z)-PI*place->nlat.s)/(2+2*cos(2*z));
  13. z -= w;
  14. } while(fabs(w)>=.00001);
  15. *y = sin(z);
  16. *x = - (2/PI)*cos(z)*place->wlon.l;
  17. return(1);
  18. }
  19. proj
  20. mollweide(void)
  21. {
  22. return(Xmollweide);
  23. }