xref: /plan9/sys/src/cmd/map/libmap/mollweide.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 
53e12c5d1SDavid du Colombier static int
Xmollweide(struct place * place,double * x,double * y)6219b2ee8SDavid du Colombier Xmollweide(struct place *place, double *x, double *y)
73e12c5d1SDavid du Colombier {
8219b2ee8SDavid du Colombier 	double z;
9219b2ee8SDavid du Colombier 	double w;
103e12c5d1SDavid du Colombier 	z = place->nlat.l;
113e12c5d1SDavid du Colombier 	if(fabs(z)<89.9*RAD)
123e12c5d1SDavid du Colombier 		do {	/*newton for 2z+sin2z=pi*sin(lat)*/
133e12c5d1SDavid du Colombier 			w = (2*z+sin(2*z)-PI*place->nlat.s)/(2+2*cos(2*z));
143e12c5d1SDavid du Colombier 			z -= w;
153e12c5d1SDavid du Colombier 		} while(fabs(w)>=.00001);
163e12c5d1SDavid du Colombier 	*y = sin(z);
173e12c5d1SDavid du Colombier 	*x = - (2/PI)*cos(z)*place->wlon.l;
183e12c5d1SDavid du Colombier 	return(1);
193e12c5d1SDavid du Colombier }
203e12c5d1SDavid du Colombier 
213e12c5d1SDavid du Colombier proj
mollweide(void)223e12c5d1SDavid du Colombier mollweide(void)
233e12c5d1SDavid du Colombier {
243e12c5d1SDavid du Colombier 	return(Xmollweide);
253e12c5d1SDavid du Colombier }
26