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