123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
- #pragma lib "/sys/src/cmd/map/libmap/libmap.a$O"
- #pragma src "/sys/src/cmd/map/libmap"
- #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 *);
|