init.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "astro.h"
  2. Obj2* objlst[] =
  3. {
  4. &osun,
  5. &omoon,
  6. &oshad,
  7. &omerc,
  8. &ovenus,
  9. &omars,
  10. &ojup,
  11. &osat,
  12. &ouran,
  13. &onept,
  14. &oplut,
  15. &ocomet,
  16. 0,
  17. };
  18. struct idata
  19. {
  20. char* name;
  21. char* name1;
  22. void (*obj)(void);
  23. } idata[] =
  24. {
  25. "The sun", "sun", fsun,
  26. "The moon", "moon", moon,
  27. "The shadow", "shadow", shad,
  28. "Mercury", "mercury", merc,
  29. "Venus", "venus", venus,
  30. "Mars", "mars", mars,
  31. "Jupiter", "jupiter", jup,
  32. "Saturn", "saturn", sat,
  33. "Uranus", "uranus", uran,
  34. "Neptune", "neptune", nept,
  35. "Pluto", "pluto", plut,
  36. "Comet", "comet", comet,
  37. };
  38. void
  39. init(void)
  40. {
  41. Obj2 *q;
  42. int i;
  43. glat = nlat - (692.74*radsec)*sin(2.*nlat)
  44. + (1.16*radsec)*sin(4.*nlat);
  45. erad = .99832707e0 + .00167644e0*cos(2.*nlat)
  46. - 0.352e-5*cos(4.*nlat)
  47. + 0.001e-5*cos(6.*nlat)
  48. + 0.1568e-6*elev;
  49. for(i=0; q=objlst[i]; i++) {
  50. q->name = idata[i].name;
  51. q->name1 = idata[i].name1;
  52. q->obj = idata[i].obj;
  53. }
  54. ostar.obj = fstar;
  55. ostar.name = "star";
  56. }
  57. void
  58. setime(double d)
  59. {
  60. double x, xm, ym, zm;
  61. eday = d + deltat/86400.;
  62. wlong = awlong + 15.*deltat*radsec;
  63. capt = eday/36524.220e0;
  64. capt2 = capt*capt;
  65. capt3 = capt*capt2;
  66. nutate();
  67. eday += .1;
  68. sun();
  69. srad = rad;
  70. xm = rad*cos(beta)*cos(lambda);
  71. ym = rad*cos(beta)*sin(lambda);
  72. zm = rad*sin(beta);
  73. eday -= .1;
  74. sun();
  75. xms = rad*cos(beta)*cos(lambda);
  76. yms = rad*cos(beta)*sin(lambda);
  77. zms = rad*sin(beta);
  78. x = .057756;
  79. xdot = x*(xm-xms);
  80. ydot = x*(ym-yms);
  81. zdot = x*(zm-zms);
  82. }
  83. void
  84. setobj(Obj1 *op)
  85. {
  86. Obj1 *p;
  87. p = op;
  88. p->ra = ra;
  89. p->decl2 = decl2;
  90. p->semi2 = semi2;
  91. p->az = az;
  92. p->el = el;
  93. p->mag = mag;
  94. }
  95. long starsao = 0;
  96. void
  97. fstar(void)
  98. {
  99. ra = ostar.point[0].ra;
  100. decl2 = ostar.point[0].decl2;
  101. semi2 = ostar.point[0].semi2;
  102. az = ostar.point[0].az;
  103. el = ostar.point[0].el;
  104. mag = ostar.point[0].mag;
  105. }
  106. void
  107. fsun(void)
  108. {
  109. beta = 0;
  110. rad = 0;
  111. lambda = 0;
  112. motion = 0;
  113. helio();
  114. geo();
  115. seday = eday;
  116. salph = alpha;
  117. sdelt = delta;
  118. mag = lmb2;
  119. }
  120. void
  121. shad(void)
  122. {
  123. if(seday != eday)
  124. fsun();
  125. if(meday != eday)
  126. moon();
  127. alpha = fmod(salph+pi, pipi);
  128. delta = -sdelt;
  129. hp = mhp;
  130. semi = 1.0183*mhp/radsec - 969.85/srad;
  131. geo();
  132. }