Blame


1 28994509 2004-04-21 devnull #include <u.h>
2 28994509 2004-04-21 devnull #include <libc.h>
3 28994509 2004-04-21 devnull #include "map.h"
4 28994509 2004-04-21 devnull
5 28994509 2004-04-21 devnull static double v3,u2,u3,a,b; /*v=view,p=obj,u=unit.y*/
6 28994509 2004-04-21 devnull
7 28994509 2004-04-21 devnull static int
8 28994509 2004-04-21 devnull Xharrison(struct place *place, double *x, double *y)
9 28994509 2004-04-21 devnull {
10 28994509 2004-04-21 devnull double p1 = -place->nlat.c*place->wlon.s;
11 28994509 2004-04-21 devnull double p2 = -place->nlat.c*place->wlon.c;
12 28994509 2004-04-21 devnull double p3 = place->nlat.s;
13 28994509 2004-04-21 devnull double d = b + u3*p2 - u2*p3;
14 28994509 2004-04-21 devnull double t;
15 28994509 2004-04-21 devnull if(d < .01)
16 28994509 2004-04-21 devnull return -1;
17 28994509 2004-04-21 devnull t = a/d;
18 28994509 2004-04-21 devnull if(v3*place->nlat.s < 1.)
19 28994509 2004-04-21 devnull return -1;
20 28994509 2004-04-21 devnull *y = t*p2*u2 + (v3-t*(v3-p3))*u3;
21 28994509 2004-04-21 devnull *x = t*p1;
22 28994509 2004-04-21 devnull if(t < 0)
23 28994509 2004-04-21 devnull return 0;
24 28994509 2004-04-21 devnull if(*x * *x + *y * *y > 16)
25 28994509 2004-04-21 devnull return -1;
26 28994509 2004-04-21 devnull return 1;
27 28994509 2004-04-21 devnull }
28 28994509 2004-04-21 devnull
29 28994509 2004-04-21 devnull proj
30 28994509 2004-04-21 devnull harrison(double r, double alpha)
31 28994509 2004-04-21 devnull {
32 28994509 2004-04-21 devnull u2 = cos(alpha*RAD);
33 28994509 2004-04-21 devnull u3 = sin(alpha*RAD);
34 28994509 2004-04-21 devnull v3 = r;
35 28994509 2004-04-21 devnull b = r*u2;
36 28994509 2004-04-21 devnull a = 1 + b;
37 28994509 2004-04-21 devnull if(r<1.001 || a<sqrt(r*r-1))
38 28994509 2004-04-21 devnull return 0;
39 28994509 2004-04-21 devnull return Xharrison;
40 28994509 2004-04-21 devnull }