diff options
Diffstat (limited to 'src/cmd/map/libmap/elliptic.c')
-rw-r--r-- | src/cmd/map/libmap/elliptic.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/cmd/map/libmap/elliptic.c b/src/cmd/map/libmap/elliptic.c new file mode 100644 index 00000000..3f3b1d57 --- /dev/null +++ b/src/cmd/map/libmap/elliptic.c @@ -0,0 +1,35 @@ +#include <u.h> +#include <libc.h> +#include "map.h" + +struct coord center; + +static int +Xelliptic(struct place *place, double *x, double *y) +{ + double r1,r2; + r1 = acos(place->nlat.c*(place->wlon.c*center.c + - place->wlon.s*center.s)); + r2 = acos(place->nlat.c*(place->wlon.c*center.c + + place->wlon.s*center.s)); + *x = -(r1*r1 - r2*r2)/(4*center.l); + *y = (r1*r1+r2*r2)/2 - (center.l*center.l+*x**x); + if(*y < 0) + *y = 0; + *y = sqrt(*y); + if(place->nlat.l<0) + *y = -*y; + return(1); +} + +proj +elliptic(double l) +{ + l = fabs(l); + if(l>89) + return(0); + if(l<1) + return(Xazequidistant); + deg2rad(l,¢er); + return(Xelliptic); +} |