1 #pragma lib "/sys/src/cmd/map/libmap/libmap.a$O"
2 #pragma src "/sys/src/cmd/map/libmap"
5 #define PI 3.1415926535897932384626433832795028841971693993751
11 #define ECC .08227185422 /* eccentricity of earth */
12 #define EC2 .006768657997
15 #define UNUSED 0.0 /* a dummy double parameter */
18 double l; /* lat or lon in radians*/
27 typedef int (*proj)(struct place *, double *, double *);
29 struct index { /* index of known projections */
30 char *name; /* name of projection */
31 proj (*prog)(double, double);
32 /* pointer to projection function */
33 int npar; /* number of params */
34 int (*cut)(struct place *, struct place *, double *);
35 /* function that handles cuts--eg longitude 180 */
36 int poles; /*1 S pole is a line, 2 N pole is, 3 both*/
37 int spheroid; /* poles must be at 90 deg if nonzero */
38 int (*limb)(double *lat, double *lon, double resolution);
39 /* get next place on limb */
40 /* return -1 if done, 0 at gap, else 1 */
45 proj albers(double, double);
46 int Xazequalarea(struct place *, double *, double *);
47 proj azequalarea(void);
48 int Xazequidistant(struct place *, double *, double *);
49 proj azequidistant(void);
50 proj bicentric(double);
53 proj cylequalarea(double);
54 int Xcylindrical(struct place *, double *, double *);
55 proj cylindrical(void);
56 proj elliptic(double);
62 int guycut(struct place *, struct place *, double *);
63 int Xguyou(struct place *, double *, double *);
65 proj harrison(double, double);
66 int hexcut(struct place *, struct place *, double *);
69 int hlimb(double*, double*, double resolution);
71 proj lambert(double, double);
73 proj lune(double, double);
74 proj loxodromic(double); /* not in library */
76 int mlimb(double*, double*, double resolution);
79 proj newyorker(double);
80 proj ortelius(double, double); /* not in library */
81 int Xorthographic(struct place *place, double *x, double *y);
82 proj orthographic(void);
83 int olimb(double*, double*, double);
84 proj perspective(double);
85 int plimb(double*, double*, double resolution);
86 int Xpolyconic(struct place *, double *, double *);
88 proj rectangular(double);
89 proj simpleconic(double, double);
90 int Xsinusoidal(struct place *, double *, double *);
91 proj sinusoidal(void);
92 proj sp_albers(double, double);
93 proj sp_mercator(void);
95 int Xstereographic(struct place *, double *, double *);
96 proj stereographic(void);
97 int Xtetra(struct place *, double *, double *);
98 int tetracut(struct place *, struct place *, double *);
100 proj trapezoidal(double, double);
101 proj vandergrinten(void);
102 proj wreath(double, double); /* not in library */
104 void findxy(double, double *, double *);
105 void albscale(double, double, double, double);
106 void invalb(double, double, double *, double *);
108 void cdiv(double, double, double, double, double *, double *);
109 void cmul(double, double, double, double, double *, double *);
110 void cpow(double, double, double *, double *, double);
111 void csq(double, double, double *, double *);
112 void csqrt(double, double, double *, double *);
113 void ccubrt(double, double, double *, double *);
114 double cubrt(double);
115 int elco2(double, double, double, double, double, double *, double *);
116 void cdiv2(double, double, double, double, double *, double *);
117 void csqr(double, double, double *, double *);
119 void orient(double, double, double);
120 void latlon(double, double, struct place *);
121 void deg2rad(double, struct coord *);
122 void sincos(struct coord *);
123 void normalize(struct place *);
124 void invert(struct place *);
125 void norm(struct place *, struct place *, struct coord *);
126 void printp(struct place *);
127 void copyplace(struct place *, struct place *);
129 int picut(struct place *, struct place *, double *);
130 int ckcut(struct place *, struct place *, double);
131 double reduce(double);
133 void getsyms(char *);
134 int putsym(struct place *, char *, double, int);
135 void filerror(char *s, char *f);
137 int doproj(struct place *, int *, int *);
138 int cpoint(int, int, int);
139 int plotpt(struct place *, int);
140 int nocut(struct place *, struct place *, double *);
142 extern int (*projection)(struct place *, double *, double *);