map.h 4.9 KB

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