xref: /plan9/sys/src/cmd/map/libmap/bonne.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
1 #include <u.h>
2 #include <libc.h>
3 #include "map.h"
4 
5 static struct coord stdpar;
6 static double r0;
7 
8 static
Xbonne(struct place * place,double * x,double * y)9 Xbonne(struct place *place, double *x, double *y)
10 {
11 	double r, alpha;
12 	r = r0 - place->nlat.l;
13 	if(r<.001)
14 		if(fabs(stdpar.c)<1e-10)
15 			alpha = place->wlon.l;
16 		else if(fabs(place->nlat.c)==0)
17 			alpha = 0;
18 		else
19 			alpha = place->wlon.l/(1+
20 				stdpar.c*stdpar.c*stdpar.c/place->nlat.c/3);
21 	else
22 		alpha = place->wlon.l * place->nlat.c / r;
23 	*x = - r*sin(alpha);
24 	*y = - r*cos(alpha);
25 	return(1);
26 }
27 
28 proj
bonne(double par)29 bonne(double par)
30 {
31 	if(fabs(par*RAD) < .01)
32 		return(Xsinusoidal);
33 	deg2rad(par, &stdpar);
34 	r0 = stdpar.c/stdpar.s + stdpar.l;
35 	return(Xbonne);
36 }
37