plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

map.h (4780B)


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