polyconic.c 584 B

12345678910111213141516171819202122232425262728
  1. #include <u.h>
  2. #include <libc.h>
  3. #include "map.h"
  4. int
  5. Xpolyconic(struct place *place, double *x, double *y)
  6. {
  7. double r, alpha;
  8. double lat2, lon2;
  9. if(fabs(place->nlat.l) > .01) {
  10. r = place->nlat.c / place->nlat.s;
  11. alpha = place->wlon.l * place->nlat.s;
  12. *y = place->nlat.l + r*(1 - cos(alpha));
  13. *x = - r*sin(alpha);
  14. } else {
  15. lon2 = place->wlon.l * place->wlon.l;
  16. lat2 = place->nlat.l * place->nlat.l;
  17. *y = place->nlat.l * (1+(lon2/2)*(1-(8+lon2)*lat2/12));
  18. *x = - place->wlon.l * (1-lat2*(3+lon2)/6);
  19. }
  20. return(1);
  21. }
  22. proj
  23. polyconic(void)
  24. {
  25. return(Xpolyconic);
  26. }