merc.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "astro.h"
  2. void
  3. merc(void)
  4. {
  5. double pturbl, pturbr;
  6. double lograd;
  7. double dele, enom, vnom, nd, sl;
  8. double q0, v0, t0, j0 , s0;
  9. double lsun, elong, ci, dlong;
  10. ecc = .20561421 + .00002046*capt - 0.03e-6*capt2;
  11. incl = 7.0028806 + .0018608*capt - 18.3e-6*capt2;
  12. node = 47.145944 + 1.185208*capt + .0001739*capt2;
  13. argp = 75.899697 + 1.555490*capt + .0002947*capt2;
  14. mrad = .3870986;
  15. anom = 102.279381 + 4.0923344364*eday + 6.7e-6*capt2;
  16. motion = 4.0923770233;
  17. q0 = 102.28 + 4.092334429*eday;
  18. v0 = 212.536 + 1.602126105*eday;
  19. t0 = -1.45 + .985604737*eday;
  20. j0 = 225.36 + .083086735*eday;
  21. s0 = 175.68 + .033455441*eday;
  22. q0 *= radian;
  23. v0 *= radian;
  24. t0 *= radian;
  25. j0 *= radian;
  26. s0 *= radian;
  27. incl *= radian;
  28. node *= radian;
  29. argp *= radian;
  30. anom = fmod(anom, 360.)*radian;
  31. enom = anom + ecc*sin(anom);
  32. do {
  33. dele = (anom - enom + ecc * sin(enom)) /
  34. (1. - ecc*cos(enom));
  35. enom += dele;
  36. } while(fabs(dele) > converge);
  37. vnom = 2.*atan2(sqrt((1.+ecc)/(1.-ecc))*sin(enom/2.),
  38. cos(enom/2.));
  39. rad = mrad*(1. - ecc*cos(enom));
  40. icosadd(mercfp, merccp);
  41. pturbl = cosadd(2, q0, -v0);
  42. pturbl += cosadd(2, q0, -t0);
  43. pturbl += cosadd(2, q0, -j0);
  44. pturbl += cosadd(2, q0, -s0);
  45. pturbr = cosadd(2, q0, -v0);
  46. pturbr += cosadd(2, q0, -t0);
  47. pturbr += cosadd(2, q0, -j0);
  48. /*
  49. * reduce to the ecliptic
  50. */
  51. lambda = vnom + argp + pturbl*radsec;
  52. nd = lambda - node;
  53. lambda = node + atan2(sin(nd)*cos(incl), cos(nd));
  54. sl = sin(incl)*sin(nd);
  55. beta = atan2(sl, pyth(sl));
  56. lograd = pturbr*2.30258509;
  57. rad *= 1. + lograd;
  58. motion *= radian*mrad*mrad/(rad*rad);
  59. semi = 3.34;
  60. lsun = 99.696678 + 0.9856473354*eday;
  61. lsun *= radian;
  62. elong = lambda - lsun;
  63. ci = (rad - cos(elong))/sqrt(1. + rad*rad - 2.*rad*cos(elong));
  64. dlong = atan2(pyth(ci), ci)/radian;
  65. mag = -.003 + .01815*dlong + .0001023*dlong*dlong;
  66. helio();
  67. geo();
  68. }