|
|
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: };
48:
49:
50: proj aitoff(void);
51: proj albers(double, double);
52: int Xazequalarea(struct place *, double *, double *);
53: proj azequalarea(void);
54: int Xazequidistant(struct place *, double *, double *);
55: proj azequidistant(void);
56: proj bicentric(double);
57: proj bonne(double);
58: proj conic(double);
59: proj cylequalarea(double);
60: int Xcylindrical(struct place *, double *, double *);
61: proj cylindrical(void);
62: proj elliptic(double);
63: proj fisheye(double);
64: proj gall(double);
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: proj lagrange(void);
75: proj lambert(double, double);
76: proj laue(void);
77: proj loxodromic(double); /* not in library */
78: proj mecca(double);
79: proj mercator(void);
80: proj mollweide(void);
81: proj newyorker(double);
82: proj ortelius(double, double); /* not in library */
83: int Xorthographic(struct place *place, double *x, double *y);
84: proj orthographic(void);
85: proj perspective(double);
86: int Xpolyconic(struct place *, double *, double *);
87: proj polyconic(void);
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);
94: proj square(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 *);
99: proj tetra(void);
100: proj trapezoidal(double, double);
101: proj vandergrinten(void);
102: proj wreath(double, double); /* not in library */
103:
104: void findxy(double, double *, double *);
105: void albscale(double, double, double, double);
106: void invalb(double, double, double *, double *);
107:
108: void cdiv(double, double, double, double, double *, double *);
109: void cmul(double, double, double, double, double *, double *);
110: void csq(double, double, double *, double *);
111: void csqrt(double, double, double *, double *);
112: void ccubrt(double, double, double *, double *);
113: double cubrt(double);
114: int elco2(double, double, double, double, double, double *, double *);
115: void cdiv2(double, double, double, double, double *, double *);
116: void csqr(double, double, double *, double *);
117:
118: void orient(double, double, double);
119: void latlon(double, double, struct place *);
120: void deg2rad(double, struct coord *);
121: void sincos(struct coord *);
122: void normalize(struct place *);
123: void invert(struct place *);
124: void norm(struct place *, struct place *, struct coord *);
125: void printp(struct place *);
126: void copyplace(struct place *, struct place *);
127:
128: int picut(struct place *, struct place *, double *);
129: int ckcut(struct place *, struct place *, double);
130: double reduce(double);
131:
132: void getsyms(char *);
133: int putsym(struct place *, char *, double, int);
134: void filerror(char *s, char *f);
135: void error(char *s);
136: int doproj(struct place *, int *, int *);
137: int cpoint(int, int, int);
138: int plotpt(struct place *, int);
139: int nocut(struct place *, struct place *, double *);
140:
141: 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.