xref: /plan9-contrib/sys/src/cmd/map/libmap/lagrange.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include "map.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier static int
4*219b2ee8SDavid du Colombier Xlagrange(struct place *place, double *x, double *y)
53e12c5d1SDavid du Colombier {
6*219b2ee8SDavid du Colombier 	double z1,z2;
73e12c5d1SDavid du Colombier 	double w1,w2,t1,t2;
83e12c5d1SDavid du Colombier 	struct place p;
93e12c5d1SDavid du Colombier 	copyplace(place,&p);
103e12c5d1SDavid du Colombier 	if(place->nlat.l<0) {
113e12c5d1SDavid du Colombier 		p.nlat.l = -p.nlat.l;
123e12c5d1SDavid du Colombier 		p.nlat.s = -p.nlat.s;
133e12c5d1SDavid du Colombier 	}
143e12c5d1SDavid du Colombier 	Xstereographic(&p,&z1,&z2);
153e12c5d1SDavid du Colombier 	csqrt(-z2/2,z1/2,&w1,&w2);
163e12c5d1SDavid du Colombier 	cdiv(w1-1,w2,w1+1,w2,&t1,&t2);
173e12c5d1SDavid du Colombier 	*y = -t1;
183e12c5d1SDavid du Colombier 	*x = t2;
193e12c5d1SDavid du Colombier 	if(place->nlat.l<0)
203e12c5d1SDavid du Colombier 		*y = -*y;
213e12c5d1SDavid du Colombier 	return(1);
223e12c5d1SDavid du Colombier }
233e12c5d1SDavid du Colombier 
243e12c5d1SDavid du Colombier proj
253e12c5d1SDavid du Colombier lagrange(void)
263e12c5d1SDavid du Colombier {
273e12c5d1SDavid du Colombier 	return(Xlagrange);
283e12c5d1SDavid du Colombier }
29