|  | #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); | 
|  | } |