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 v3,u2,u3,a,b; /*v=view,p=obj,u=unit.y*/
63e12c5d1SDavid du Colombier
73e12c5d1SDavid du Colombier static int
Xharrison(struct place * place,double * x,double * y)8219b2ee8SDavid du Colombier Xharrison(struct place *place, double *x, double *y)
93e12c5d1SDavid du Colombier {
10219b2ee8SDavid du Colombier double p1 = -place->nlat.c*place->wlon.s;
11219b2ee8SDavid du Colombier double p2 = -place->nlat.c*place->wlon.c;
12219b2ee8SDavid du Colombier double p3 = place->nlat.s;
13219b2ee8SDavid du Colombier double d = b + u3*p2 - u2*p3;
14219b2ee8SDavid du Colombier double t;
153e12c5d1SDavid du Colombier if(d < .01)
16219b2ee8SDavid du Colombier return -1;
173e12c5d1SDavid du Colombier t = a/d;
183e12c5d1SDavid du Colombier if(v3*place->nlat.s < 1.)
193e12c5d1SDavid du Colombier return -1;
203e12c5d1SDavid du Colombier *y = t*p2*u2 + (v3-t*(v3-p3))*u3;
213e12c5d1SDavid du Colombier *x = t*p1;
22219b2ee8SDavid du Colombier if(t < 0)
233e12c5d1SDavid du Colombier return 0;
24219b2ee8SDavid du Colombier if(*x * *x + *y * *y > 16)
25219b2ee8SDavid du Colombier return -1;
263e12c5d1SDavid du Colombier return 1;
273e12c5d1SDavid du Colombier }
283e12c5d1SDavid du Colombier
293e12c5d1SDavid du Colombier proj
harrison(double r,double alpha)30219b2ee8SDavid du Colombier harrison(double r, double alpha)
313e12c5d1SDavid du Colombier {
323e12c5d1SDavid du Colombier u2 = cos(alpha*RAD);
333e12c5d1SDavid du Colombier u3 = sin(alpha*RAD);
343e12c5d1SDavid du Colombier v3 = r;
353e12c5d1SDavid du Colombier b = r*u2;
363e12c5d1SDavid du Colombier a = 1 + b;
373e12c5d1SDavid du Colombier if(r<1.001 || a<sqrt(r*r-1))
383e12c5d1SDavid du Colombier return 0;
393e12c5d1SDavid du Colombier return Xharrison;
403e12c5d1SDavid du Colombier }
41