venus.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #include "astro.h"
  2. void
  3. venus(void)
  4. {
  5. double pturbl, pturbb, pturbr;
  6. double lograd;
  7. double dele, enom, vnom, nd, sl;
  8. double v0, t0, m0, j0, s0;
  9. double lsun, elong, ci, dlong;
  10. /*
  11. * here are the mean orbital elements
  12. */
  13. ecc = .00682069 - .00004774*capt + 0.091e-6*capt2;
  14. incl = 3.393631 + .0010058*capt - 0.97e-6*capt2;
  15. node = 75.779647 + .89985*capt + .00041*capt2;
  16. argp = 130.163833 + 1.408036*capt - .0009763*capt2;
  17. mrad = .7233316;
  18. anom = 212.603219 + 1.6021301540*eday + .00128605*capt2;
  19. motion = 1.6021687039;
  20. /*
  21. * mean anomalies of perturbing planets
  22. */
  23. v0 = 212.60 + 1.602130154*eday;
  24. t0 = 358.63 + .985608747*eday;
  25. m0 = 319.74 + 0.524032490*eday;
  26. j0 = 225.43 + .083090842*eday;
  27. s0 = 175.8 + .033459258*eday;
  28. v0 *= radian;
  29. t0 *= radian;
  30. m0 *= radian;
  31. j0 *= radian;
  32. s0 *= radian;
  33. incl *= radian;
  34. node *= radian;
  35. argp *= radian;
  36. anom = fmod(anom, 360.)*radian;
  37. /*
  38. * computation of long period terms affecting the mean anomaly
  39. */
  40. anom +=
  41. (2.761-0.022*capt)*radsec*sin(
  42. 13.*t0 - 8.*v0 + 43.83*radian + 4.52*radian*capt)
  43. + 0.268*radsec*cos(4.*m0 - 7.*t0 + 3.*v0)
  44. + 0.019*radsec*sin(4.*m0 - 7.*t0 + 3.*v0)
  45. - 0.208*radsec*sin(s0 + 1.4*radian*capt);
  46. /*
  47. * computation of elliptic orbit
  48. */
  49. enom = anom + ecc*sin(anom);
  50. do {
  51. dele = (anom - enom + ecc * sin(enom)) /
  52. (1 - ecc*cos(enom));
  53. enom += dele;
  54. } while(fabs(dele) > converge);
  55. vnom = 2*atan2(sqrt((1+ecc)/(1-ecc))*sin(enom/2),
  56. cos(enom/2));
  57. rad = mrad*(1 - ecc*cos(enom));
  58. lambda = vnom + argp;
  59. /*
  60. * perturbations in longitude
  61. */
  62. icosadd(venfp, vencp);
  63. pturbl = cosadd(4, v0, t0, m0, j0);
  64. pturbl *= radsec;
  65. /*
  66. * perturbations in latidude
  67. */
  68. pturbb = cosadd(3, v0, t0, j0);
  69. pturbb *= radsec;
  70. /*
  71. * perturbations in log radius vector
  72. */
  73. pturbr = cosadd(4, v0, t0, m0, j0);
  74. /*
  75. * reduction to the ecliptic
  76. */
  77. lambda += pturbl;
  78. nd = lambda - node;
  79. lambda = node + atan2(sin(nd)*cos(incl),cos(nd));
  80. sl = sin(incl)*sin(nd);
  81. beta = atan2(sl, pyth(sl)) + pturbb;
  82. lograd = pturbr*2.30258509;
  83. rad *= 1 + lograd;
  84. motion *= radian*mrad*mrad/(rad*rad);
  85. /*
  86. * computation of magnitude
  87. */
  88. lsun = 99.696678 + 0.9856473354*eday;
  89. lsun *= radian;
  90. elong = lambda - lsun;
  91. ci = (rad - cos(elong))/sqrt(1 + rad*rad - 2*rad*cos(elong));
  92. dlong = atan2(pyth(ci), ci)/radian;
  93. mag = -4 + .01322*dlong + .0000004247*dlong*dlong*dlong;
  94. semi = 8.41;
  95. helio();
  96. geo();
  97. }