URI:
       tmap.h - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tmap.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 *);