13e12c5d1SDavid du Colombier #include "map.h" 23e12c5d1SDavid du Colombier 3*219b2ee8SDavid du Colombier static double v3,u2,u3,a,b; /*v=view,p=obj,u=unit.y*/ 43e12c5d1SDavid du Colombier 53e12c5d1SDavid du Colombier static int 6*219b2ee8SDavid du Colombier Xharrison(struct place *place, double *x, double *y) 73e12c5d1SDavid du Colombier { 8*219b2ee8SDavid du Colombier double p1 = -place->nlat.c*place->wlon.s; 9*219b2ee8SDavid du Colombier double p2 = -place->nlat.c*place->wlon.c; 10*219b2ee8SDavid du Colombier double p3 = place->nlat.s; 11*219b2ee8SDavid du Colombier double d = b + u3*p2 - u2*p3; 12*219b2ee8SDavid du Colombier double t; 133e12c5d1SDavid du Colombier if(d < .01) 14*219b2ee8SDavid du Colombier return -1; 153e12c5d1SDavid du Colombier t = a/d; 163e12c5d1SDavid du Colombier if(v3*place->nlat.s < 1.) 173e12c5d1SDavid du Colombier return -1; 183e12c5d1SDavid du Colombier *y = t*p2*u2 + (v3-t*(v3-p3))*u3; 193e12c5d1SDavid du Colombier *x = t*p1; 20*219b2ee8SDavid du Colombier if(t < 0) 213e12c5d1SDavid du Colombier return 0; 22*219b2ee8SDavid du Colombier if(*x * *x + *y * *y > 16) 23*219b2ee8SDavid du Colombier return -1; 243e12c5d1SDavid du Colombier return 1; 253e12c5d1SDavid du Colombier } 263e12c5d1SDavid du Colombier 273e12c5d1SDavid du Colombier proj 28*219b2ee8SDavid du Colombier harrison(double r, double alpha) 293e12c5d1SDavid du Colombier { 303e12c5d1SDavid du Colombier u2 = cos(alpha*RAD); 313e12c5d1SDavid du Colombier u3 = sin(alpha*RAD); 323e12c5d1SDavid du Colombier v3 = r; 333e12c5d1SDavid du Colombier b = r*u2; 343e12c5d1SDavid du Colombier a = 1 + b; 353e12c5d1SDavid du Colombier if(r<1.001 || a<sqrt(r*r-1)) 363e12c5d1SDavid du Colombier return 0; 373e12c5d1SDavid du Colombier return Xharrison; 383e12c5d1SDavid du Colombier } 39