trapezoidal.c 578 B

123456789101112131415161718192021222324252627282930
  1. #include <u.h>
  2. #include <libc.h>
  3. #include "map.h"
  4. static struct coord stdpar0, stdpar1;
  5. static double k;
  6. static double yeq;
  7. static int
  8. Xtrapezoidal(struct place *place, double *x, double *y)
  9. {
  10. *y = yeq + place->nlat.l;
  11. *x = *y*k*place->wlon.l;
  12. return 1;
  13. }
  14. proj
  15. trapezoidal(double par0, double par1)
  16. {
  17. if(fabs(fabs(par0)-fabs(par1))<.1)
  18. return rectangular(par0);
  19. deg2rad(par0,&stdpar0);
  20. deg2rad(par1,&stdpar1);
  21. if(fabs(par1-par0) < .1)
  22. k = stdpar1.s;
  23. else
  24. k = (stdpar1.c-stdpar0.c)/(stdpar0.l-stdpar1.l);
  25. yeq = -stdpar1.l - stdpar1.c/k;
  26. return Xtrapezoidal;
  27. }