map.h 4.5 KB

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