map.h 4.8 KB

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