diff options
Diffstat (limited to 'src/cmd/map/map.h')
-rw-r--r-- | src/cmd/map/map.h | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/src/cmd/map/map.h b/src/cmd/map/map.h new file mode 100644 index 00000000..d96497c8 --- /dev/null +++ b/src/cmd/map/map.h @@ -0,0 +1,147 @@ +/* +#pragma lib "/sys/src/cmd/map/libmap/libmap.a$O" +#pragma src "/sys/src/cmd/map/libmap" +*/ + +#define index index0 +#ifndef PI +#define PI 3.1415926535897932384626433832795028841971693993751 +#endif + +#define TWOPI (2*PI) +#define RAD (PI/180) +double hypot(double, double); /* sqrt(a*a+b*b) */ +double tan(double); /* not in K&R library */ + +#define ECC .08227185422 /* eccentricity of earth */ +#define EC2 .006768657997 + +#define FUZZ .0001 +#define UNUSED 0.0 /* a dummy double parameter */ + +struct coord { + double l; /* lat or lon in radians*/ + double s; /* sin */ + double c; /* cos */ +}; +struct place { + struct coord nlat; + struct coord wlon; +}; + +typedef int (*proj)(struct place *, double *, double *); + +struct index { /* index of known projections */ + char *name; /* name of projection */ + proj (*prog)(double, double); + /* pointer to projection function */ + int npar; /* number of params */ + int (*cut)(struct place *, struct place *, double *); + /* function that handles cuts--eg longitude 180 */ + int poles; /*1 S pole is a line, 2 N pole is, 3 both*/ + int spheroid; /* poles must be at 90 deg if nonzero */ + int (*limb)(double *lat, double *lon, double resolution); + /* get next place on limb */ + /* return -1 if done, 0 at gap, else 1 */ +}; + + +proj aitoff(void); +proj albers(double, double); +int Xazequalarea(struct place *, double *, double *); +proj azequalarea(void); +int Xazequidistant(struct place *, double *, double *); +proj azequidistant(void); +proj bicentric(double); +proj bonne(double); +proj conic(double); +proj cylequalarea(double); +int Xcylindrical(struct place *, double *, double *); +proj cylindrical(void); +proj elliptic(double); +proj fisheye(double); +proj gall(double); +proj gilbert(void); +proj globular(void); +proj gnomonic(void); +int guycut(struct place *, struct place *, double *); +int Xguyou(struct place *, double *, double *); +proj guyou(void); +proj harrison(double, double); +int hexcut(struct place *, struct place *, double *); +proj hex(void); +proj homing(double); +int hlimb(double*, double*, double resolution); +proj lagrange(void); +proj lambert(double, double); +proj laue(void); +proj lune(double, double); +proj loxodromic(double); /* not in library */ +proj mecca(double); +int mlimb(double*, double*, double resolution); +proj mercator(void); +proj mollweide(void); +proj newyorker(double); +proj ortelius(double, double); /* not in library */ +int Xorthographic(struct place *place, double *x, double *y); +proj orthographic(void); +int olimb(double*, double*, double); +proj perspective(double); +int plimb(double*, double*, double resolution); +int Xpolyconic(struct place *, double *, double *); +proj polyconic(void); +proj rectangular(double); +proj simpleconic(double, double); +int Xsinusoidal(struct place *, double *, double *); +proj sinusoidal(void); +proj sp_albers(double, double); +proj sp_mercator(void); +proj square(void); +int Xstereographic(struct place *, double *, double *); +proj stereographic(void); +int Xtetra(struct place *, double *, double *); +int tetracut(struct place *, struct place *, double *); +proj tetra(void); +proj trapezoidal(double, double); +proj vandergrinten(void); +proj wreath(double, double); /* not in library */ + +void findxy(double, double *, double *); +void albscale(double, double, double, double); +void invalb(double, double, double *, double *); + +void cdiv(double, double, double, double, double *, double *); +void cmul(double, double, double, double, double *, double *); +void cpow(double, double, double *, double *, double); +void csq(double, double, double *, double *); +void csqrt(double, double, double *, double *); +void ccubrt(double, double, double *, double *); +double cubrt(double); +int elco2(double, double, double, double, double, double *, double *); +void cdiv2(double, double, double, double, double *, double *); +void csqr(double, double, double *, double *); + +void orient(double, double, double); +void latlon(double, double, struct place *); +void deg2rad(double, struct coord *); +void sincos(struct coord *); +void normalize(struct place *); +void invert(struct place *); +void norm(struct place *, struct place *, struct coord *); +void printp(struct place *); +void copyplace(struct place *, struct place *); + +int picut(struct place *, struct place *, double *); +int ckcut(struct place *, struct place *, double); +double reduce(double); + +void getsyms(char *); +int putsym(struct place *, char *, double, int); +void filerror(char *s, char *f); +void error(char *s); +int doproj(struct place *, int *, int *); +int cpoint(int, int, int); +int plotpt(struct place *, int); +int nocut(struct place *, struct place *, double *); + +extern int (*projection)(struct place *, double *, double *); |