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