xref: /plan9/sys/src/cmd/map/libmap/gall.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
1*59cc4ca5SDavid du Colombier #include <u.h>
2*59cc4ca5SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier #include "map.h"
43e12c5d1SDavid du Colombier 
5219b2ee8SDavid du Colombier static double scale;
63e12c5d1SDavid du Colombier 
73e12c5d1SDavid du Colombier static int
Xgall(struct place * place,double * x,double * y)8219b2ee8SDavid du Colombier Xgall(struct place *place, double *x, double *y)
93e12c5d1SDavid du Colombier {
103e12c5d1SDavid du Colombier 	/* two ways to compute tan(place->nlat.l/2) */
113e12c5d1SDavid du Colombier 	if(fabs(place->nlat.s)<.1)
123e12c5d1SDavid du Colombier 		*y = sin(place->nlat.l/2)/cos(place->nlat.l/2);
133e12c5d1SDavid du Colombier 	else
143e12c5d1SDavid du Colombier 		*y = (1-place->nlat.c)/place->nlat.s;
153e12c5d1SDavid du Colombier 	*x = -scale*place->wlon.l;
163e12c5d1SDavid du Colombier 	return 1;
173e12c5d1SDavid du Colombier }
183e12c5d1SDavid du Colombier 
193e12c5d1SDavid du Colombier proj
gall(double par)20219b2ee8SDavid du Colombier gall(double par)
213e12c5d1SDavid du Colombier {
22219b2ee8SDavid du Colombier 	double coshalf;
233e12c5d1SDavid du Colombier 	if(fabs(par)>80)
243e12c5d1SDavid du Colombier 		return 0;
253e12c5d1SDavid du Colombier 	par *= RAD;
263e12c5d1SDavid du Colombier 	coshalf = cos(par/2);
273e12c5d1SDavid du Colombier 	scale = cos(par)/(2*coshalf*coshalf);
283e12c5d1SDavid du Colombier 	return Xgall;
293e12c5d1SDavid du Colombier }
30