Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

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