xref: /plan9/sys/src/cmd/map/libmap/fisheye.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 /* refractive fisheye, not logarithmic */
53e12c5d1SDavid du Colombier 
6219b2ee8SDavid du Colombier static double n;
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier static int
Xfisheye(struct place * place,double * x,double * y)9219b2ee8SDavid du Colombier Xfisheye(struct place *place, double *x, double *y)
103e12c5d1SDavid du Colombier {
11219b2ee8SDavid du Colombier 	double r;
12219b2ee8SDavid du Colombier 	double u = sin(PI/4-place->nlat.l/2)/n;
133e12c5d1SDavid du Colombier 	if(fabs(u) > .97)
143e12c5d1SDavid du Colombier 		return -1;
153e12c5d1SDavid du Colombier 	r = tan(asin(u));
163e12c5d1SDavid du Colombier 	*x = -r*place->wlon.s;
173e12c5d1SDavid du Colombier 	*y = -r*place->wlon.c;
183e12c5d1SDavid du Colombier 	return 1;
193e12c5d1SDavid du Colombier }
203e12c5d1SDavid du Colombier 
213e12c5d1SDavid du Colombier proj
fisheye(double par)22219b2ee8SDavid du Colombier fisheye(double par)
233e12c5d1SDavid du Colombier {
243e12c5d1SDavid du Colombier 	n = par;
253e12c5d1SDavid du Colombier 	return n<.1? 0: Xfisheye;
263e12c5d1SDavid du Colombier }
27