map.h (4780B)
1 /* 2 #pragma lib "/sys/src/cmd/map/libmap/libmap.a$O" 3 #pragma src "/sys/src/cmd/map/libmap" 4 */ 5 6 #define index index0 7 #ifndef PI 8 #define PI 3.1415926535897932384626433832795028841971693993751 9 #endif 10 11 #define TWOPI (2*PI) 12 #define RAD (PI/180) 13 double hypot(double, double); /* sqrt(a*a+b*b) */ 14 double tan(double); /* not in K&R library */ 15 16 #define ECC .08227185422 /* eccentricity of earth */ 17 #define EC2 .006768657997 18 19 #define FUZZ .0001 20 #define UNUSED 0.0 /* a dummy double parameter */ 21 22 struct coord { 23 double l; /* lat or lon in radians*/ 24 double s; /* sin */ 25 double c; /* cos */ 26 }; 27 struct place { 28 struct coord nlat; 29 struct coord wlon; 30 }; 31 32 typedef int (*proj)(struct place *, double *, double *); 33 34 struct index { /* index of known projections */ 35 char *name; /* name of projection */ 36 proj (*prog)(double, double); 37 /* pointer to projection function */ 38 int npar; /* number of params */ 39 int (*cut)(struct place *, struct place *, double *); 40 /* function that handles cuts--eg longitude 180 */ 41 int poles; /*1 S pole is a line, 2 N pole is, 3 both*/ 42 int spheroid; /* poles must be at 90 deg if nonzero */ 43 int (*limb)(double *lat, double *lon, double resolution); 44 /* get next place on limb */ 45 /* return -1 if done, 0 at gap, else 1 */ 46 }; 47 48 49 proj aitoff(void); 50 proj albers(double, double); 51 int Xazequalarea(struct place *, double *, double *); 52 proj azequalarea(void); 53 int Xazequidistant(struct place *, double *, double *); 54 proj azequidistant(void); 55 proj bicentric(double); 56 proj bonne(double); 57 proj conic(double); 58 proj cylequalarea(double); 59 int Xcylindrical(struct place *, double *, double *); 60 proj cylindrical(void); 61 proj elliptic(double); 62 proj fisheye(double); 63 proj gall(double); 64 proj gilbert(void); 65 proj globular(void); 66 proj gnomonic(void); 67 int guycut(struct place *, struct place *, double *); 68 int Xguyou(struct place *, double *, double *); 69 proj guyou(void); 70 proj harrison(double, double); 71 int hexcut(struct place *, struct place *, double *); 72 proj hex(void); 73 proj homing(double); 74 int hlimb(double*, double*, double resolution); 75 proj lagrange(void); 76 proj lambert(double, double); 77 proj laue(void); 78 proj lune(double, double); 79 proj loxodromic(double); /* not in library */ 80 proj mecca(double); 81 int mlimb(double*, double*, double resolution); 82 proj mercator(void); 83 proj mollweide(void); 84 proj newyorker(double); 85 proj ortelius(double, double); /* not in library */ 86 int Xorthographic(struct place *place, double *x, double *y); 87 proj orthographic(void); 88 int olimb(double*, double*, double); 89 proj perspective(double); 90 int plimb(double*, double*, double resolution); 91 int Xpolyconic(struct place *, double *, double *); 92 proj polyconic(void); 93 proj rectangular(double); 94 proj simpleconic(double, double); 95 int Xsinusoidal(struct place *, double *, double *); 96 proj sinusoidal(void); 97 proj sp_albers(double, double); 98 proj sp_mercator(void); 99 proj square(void); 100 int Xstereographic(struct place *, double *, double *); 101 proj stereographic(void); 102 int Xtetra(struct place *, double *, double *); 103 int tetracut(struct place *, struct place *, double *); 104 proj tetra(void); 105 proj trapezoidal(double, double); 106 proj vandergrinten(void); 107 proj wreath(double, double); /* not in library */ 108 109 void findxy(double, double *, double *); 110 void albscale(double, double, double, double); 111 void invalb(double, double, double *, double *); 112 113 #define csqrt map_csqrt /* conflicts on FreeBSD 5 with gcc builtins */ 114 #define cpow map_cpow 115 #define sincos map_sincos 116 117 void cdiv(double, double, double, double, double *, double *); 118 void cmul(double, double, double, double, double *, double *); 119 void cpow(double, double, double *, double *, double); 120 void csq(double, double, double *, double *); 121 void csqrt(double, double, double *, double *); 122 void ccubrt(double, double, double *, double *); 123 double cubrt(double); 124 int elco2(double, double, double, double, double, double *, double *); 125 void cdiv2(double, double, double, double, double *, double *); 126 void csqr(double, double, double *, double *); 127 128 void orient(double, double, double); 129 void latlon(double, double, struct place *); 130 void deg2rad(double, struct coord *); 131 void sincos(struct coord *); 132 void normalize(struct place *); 133 void invert(struct place *); 134 void norm(struct place *, struct place *, struct coord *); 135 void printp(struct place *); 136 void copyplace(struct place *, struct place *); 137 138 int picut(struct place *, struct place *, double *); 139 int ckcut(struct place *, struct place *, double); 140 double reduce(double); 141 142 void getsyms(char *); 143 int putsym(struct place *, char *, double, int); 144 void filerror(char *s, char *f); 145 void error(char *s); 146 int doproj(struct place *, int *, int *); 147 int cpoint(int, int, int); 148 int plotpt(struct place *, int); 149 int nocut(struct place *, struct place *, double *); 150 151 extern int (*projection)(struct place *, double *, double *);