/* compute the position of the m`planets and return the epli value */ #include #include /* crude magnitudes of planets (x100) for output filtering by brightness */ #define MAGSOL -9.9 #define MAGMER -1.50 #define MAGVEN -4.0 #define MAGMAR -1.00 #define MAGJUP -2.00 #define MAGSAT 1.00 #define MAGURA 5.90 #define MAGNEP 8.00 extern double rad; double htod(), atof(), kepler(), truean(); double longi(), lati(), poly(), aint(), range(); int cls(), helio_trans(), geo_trans(), speak(); double planet_pos(jd, T0) double jd, T0; { double l, a, e, i, w1, w2, M, M0, M1, M2, M4, M5, M6, M7, M8; double a0, a1, a2, a3, RA, DEC; double ECC, nu, r, u, ll, b, lonpert, radpert; double esun, Lsun, Cen, Stheta, Snu, Sr; double N, D, epli, thapp, omeg; double nu2, P, Q, S, V, W, ze, l1pert, epert, w1pert, apert; double psi, H, G, eta, th; /* Calculate orbital elements for Mercury */ a0 = 178.179078; a1 = 149474.07078; a2 = 0.0003011; a3 = 0.0; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 0.3870986; a0 = 0.20561421; a1 = 0.00002046; a2 = -0.000000030; e = poly(a0, a1, a2, a3, T0); a0 = 7.002881; a1 = 0.0018608; a2 = -0.0000183; i = poly(a0, a1, a2, a3, T0); a0 = 28.753753; a1 = 0.3702806; a2 = 0.0001208; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 47.145944; a1 = 1.1852083; a2 = 0.0001739; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); M1 = 102.27938 + 149472.51529 * T0 + 0.000007 * T0 * T0; M1 = range(M1); /* solving Kepler find the eccentric anomaly ECC */ ECC = kepler(e, M1); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M1 - w2; ll = longi(w2, i, u); b = lati(u, i); /* Now make corrections due to perturbations */ M2 = 212.60322 + 58517.80387 * T0 + 0.001286 * T0 * T0; M2 = range(M2); M4 = 319.51913 + 19139.85475 * T0 + 0.000181 * T0 * T0; M4 = range(M4); M5 = 225.32833 + 3034.69202 * T0 - 0.000722 * T0 * T0; M5 = range(M5); M6 = 175.46622 + 1221.55147 * T0 - 0.000502 * T0 * T0; M6 = range(M6); lonpert = 0.00204 * cos((5 * M2 - 2 * M1 + 12.220) * rad) + 0.00103 * cos((2 * M2 - M1 - 160.692) * rad) + 0.00091 * cos((2 * M5 - M1 - 37.003) * rad) + 0.00078 * cos((5 * M2 - 3 * M1 + 10.137) * rad); radpert = 0.000007525 * cos((2 * M5 - M1 + 53.013) * rad) + 0.000006802 * cos((5 * M2 - 3 * M1 - 259.918) * rad) + 0.000005457 * cos((2 * M2 - 2 * M1 - 71.188) * rad) + 0.000003569 * cos((5 * M2 - M1 - 77.75) * rad); r = r + radpert; ll = ll + lonpert; /* Now find the Longi and radius vector of the sun */ M = 358.47583 + 35999.04975 * T0 - 0.000150 * T0 * T0 -0.0000033 * T0 * T0 * T0; M = range(M); esun = 0.01675104 - 0.0000418 * T0 - 0.000000126 * T0 * T0; Lsun = 279.69668 + 36000.76892 * T0 + 0.0003025 * T0 * T0; Lsun = range(Lsun); Cen = (1.919460 - 0.004789 * T0 - 0.000014 * T0 * T0) * sin(M * rad) + (0.020094 - 0.000100 * T0) * sin(2 * M * rad) + 0.000293 * sin(3 * M * rad); Stheta = Lsun + Cen; Stheta = range(Stheta); Snu = M + Cen; Sr = 1.0000002 * (1.0 - esun * esun) / (1.0 + esun * cos(Snu * rad)); omeg = 259.18 - 1934.142 * T0; thapp = Stheta - 0.00569 - 0.00479 * sin(omeg * rad); epli = 23.452294 - 0.0130125 * T0 -0.00000164 * T0 * T0 + 0.000000503 * T0 * T0 * T0; N = cos(epli * rad) * sin(thapp * rad); D = cos(thapp * rad); RA = atan2(N, D) / rad; DEC = asin(sin(epli * rad) * sin(thapp * rad)) / rad; speak(RA, DEC, Sr, MAGSOL, "PS", "Sol"); /* tansformation of coordinates on Mercury and output */ helio_trans(r, b, ll, Stheta, Sr, epli, MAGMER, "PM", "Mercury"); /* Now start on Venus */ a0 = 342.767053; a1 = 58519.21191; a2 = 0.0003097; a3 = 0.0; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 0.7233316; a0 = 0.00682069; a1 = -0.00004774; a2 = 0.000000091; e = poly(a0, a1, a2, a3, T0); a0 = 3.393631; a1 = 0.0010058; a2 = -0.0000010; i = poly(a0, a1, a2, a3, T0); a0 = 54.384186; a1 = 0.5081861; a2 = -0.0013864; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 75.779647; a1 = 0.8998500; a2 = 0.0004100; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); /* Venus has a long period pert that needs to be added before Kelper */ lonpert = 0.00077 * sin((237.24 + 150.27 * T0) * rad); l = l + lonpert; M0 = M2 + lonpert; ECC = kepler(e, M0); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M0 - w2; ll = longi(w2, i, u); b = lati(u, i); /* now Venus perturbations */ lonpert = 0.00313 * cos((2 * M - 2 * M2 - 148.225) * rad) + 0.00198 * cos((3 * M - 3 * M2 + 2.565) * rad) + 0.00136 * cos((M - M2 - 119.107) * rad) + 0.00096 * cos((3 * M - 2 * M2 - 135.912) * rad) + 0.00082 * cos((M5 - M2 - 208.087) * rad); ll = ll + lonpert; radpert = 0.000022501 * cos((2 * M - 2 * M2 - 58.208) * rad) + 0.000019045 * cos((3 * M - 3 * M2 + 92.577) * rad) + 0.000006887 * cos((M5 - M2 - 118.090) * rad) + 0.000005172 * cos((M - M2 - 29.110) * rad) + 0.000003620 * cos((5 * M - 4 * M2 - 104.208) * rad) + 0.000003283 * cos((4 * M - 4 * M2 + 63.513) * rad) + 0.000003074 * cos((2 * M5 - 2 * M2 - 55.167) * rad); r = r + radpert; helio_trans(r, b, ll, Stheta, Sr, epli, MAGVEN, "PV", "Venus"); /* Now start the planet Mars */ a0 = 293.737334; a1 = 19141.69551; a2 = 0.0003107; a3 = 0.0; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 1.5236883; a0 = 0.09331290; a1 = 0.000092064; a2 = -0.000000077; e = poly(a0, a1, a2, a3, T0); a0 = 1.850333; a1 = -0.0006750; a2 = 0.0000126; i = poly(a0, a1, a2, a3, T0); a0 = 285.431761; a1 = 1.0697667; a2 = 0.0001313; a3 = 0.00000414; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 48.786442; a1 = 0.7709917; a2 = -0.0000014; a3 = -0.00000533; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); /* Mars has a long period perturbation */ lonpert = -0.01133 * sin((3 * M5 - 8 * M4 + 4 * M) * rad) -0.00933 * cos((3 * M5 - 8 * M4 + 4 * M) * rad); l = l + lonpert; M0 = M4 + lonpert; ECC = kepler(e, M0); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M0 - w2; ll = longi(w2, i, u); b = lati(u, i); /* Now Mars Perturbations */ lonpert = 0.00705 * cos((M5 - M4 - 48.958) * rad) + 0.00607 * cos((2 * M5 - M4 - 188.350) * rad) + 0.00445 * cos((2 * M5 - 2 * M4 - 191.897) * rad) + 0.00388 * cos((M - 2 * M4 + 20.495) * rad) + 0.00238 * cos((M - M4 + 35.097) * rad) + 0.00204 * cos((2 * M - 3 * M4 + 158.638) * rad) + 0.00177 * cos((3 * M4 - M2 - 57.602) * rad) + 0.00136 * cos((2 * M - 4 * M4 + 154.093) * rad) + 0.00104 * cos((M5 + 17.618) * rad); ll = ll + lonpert; radpert = 0.000053227 * cos((M5 - M4 + 41.1306) * rad) + 0.000050989 * cos((2 * M5 - 2 * M4 - 101.9847) * rad) + 0.000038278 * cos((2 * M5 - M4 - 98.3292) * rad) + 0.000015996 * cos((M - M4 - 55.555) * rad) + 0.000014764 * cos((2 * M - 3 * M4 + 68.622) * rad) + 0.000008966 * cos((M5 - 2 * M4 + 43.615) * rad); /* * broken into two pieces for wimpy C compilers */ radpert += 0.000007914 * cos((3 * M5 - 2 * M4 - 139.737) * rad) + 0.000007004 * cos((2 * M5 - 3 * M4 - 102.888) * rad) + 0.000006620 * cos((M - 2 * M4 + 113.202) * rad) + 0.000004930 * cos((3 * M5 - 3 * M4 - 76.243) * rad) + 0.000004693 * cos((3 * M - 5 * M4 + 190.603) * rad) + 0.000004571 * cos((2 * M - 4 * M4 + 244.702) * rad) + 0.000004409 * cos((3 * M5 - M4 - 115.828) * rad); r = r + radpert; helio_trans(r, b, ll, Stheta, Sr, epli, MAGMAR, "Pm", "Mars"); /* Now start Jupiter */ a0 = 238.049257; a1 = 3036.301986; a2 = 0.0003347; a3 = -0.00000165; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 5.202561; a0 = 0.04833475; a1 = 0.000164180; a2 = -0.0000004676; a3 = -0.0000000017; e = poly(a0, a1, a2, a3, T0); a0 = 1.308736; a1 = -0.0056961; a2 = 0.0000039; a3 = 0.0; i = poly(a0, a1, a2, a3, T0); a0 = 273.277558; a1 = 0.5994317; a2 = 0.00070405; a3 = 0.00000508; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 99.443414; a1 = 1.0105300; a2 = 0.00035222; a3 = -0.00000851; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); /* * Now start perturbation calclations */ nu2 = T0 / 5.0 + 0.1; P = 237.47555 + 3034.9061 * T0; Q = 265.91650 + 1222.1139 * T0; S = 243.51721 + 428.4677 * T0; V = 5.0 * Q - 2.0 * P; W = 2.0 * P - 6.0 * Q + 3.0 * S; ze = Q - P; psi = S - Q; P = range(P) * rad; Q = range(Q) * rad; S = range(S) * rad; V = range(V) * rad; W = range(W) * rad; ze = range(ze) * rad; psi = range(psi) * rad; l1pert = (0.331364 - 0.010281 * nu2 - 0.004692 * nu2 * nu2) * sin(V) + (0.003228 - 0.064436 * nu2 + 0.002075 * nu2 * nu2) * cos(V) -(0.003083 + 0.000275 * nu2 - 0.000489 * nu2 * nu2) * sin(2 * V) + 0.002472 * sin(W) + 0.013619 * sin(ze) + 0.018472 * sin(2 * ze) + 0.006717 * sin(3 * ze) + 0.002775 * sin(4 * ze) + (0.007275 - 0.001253 * nu2) * sin(ze) * sin(Q) + 0.006417 * sin(2 * ze) * sin(Q) + 0.002439 * sin(3 * ze) * sin(Q); l1pert = l1pert - (0.033839 + 0.001125 * nu2) * cos(ze) * sin(Q) -0.003767 * cos(2 * ze) * sin(Q) -(0.035681 + 0.001208 * nu2) * sin(ze) * cos(Q) -0.004261 * sin(2 * ze) * cos(Q) + 0.002178 * cos(Q) + (-0.006333 + 0.001161 * nu2) * cos(ze) * cos(Q) -0.006675 * cos(2 * ze) * cos(Q) -0.002664 * cos(3 * ze) * cos(Q) -0.002572 * sin(ze) * sin(2 * Q) -0.003567 * sin(2 * ze) * sin(2 * Q) + 0.002094 * cos(ze) * cos(2 * Q) + 0.003342 * cos(2 * ze) * cos(2 * Q); epert = (.0003606 + .0000130 * nu2 - .0000043 * nu2 * nu2) * sin(V) + (.0001289 - .0000580 * nu2) * cos(V) -.0006764 * sin(ze) * sin(Q) -.0001110 * sin(2 * ze) * sin(Q) -.0000224 * sin(3 * ze) * sin(Q) -.0000204 * sin(Q) + (.0001284 + .0000116 * nu2) * cos(ze) * sin(Q) + .0000188 * cos(2 * ze) * sin(Q) + (.0001460 + .0000130 * nu2) * sin(ze) * cos(Q) + .0000224 * sin(2 * ze) * cos(Q) -.0000817 * cos(Q); epert = epert + .0006074 * cos(ze) * cos(Q) + .0000992 * cos(2 * ze) * cos(Q) + .0000508 * cos(3 * ze) * cos(Q) + .0000230 * cos(4 * ze) * cos(Q) + .0000108 * cos(5 * ze) * cos(Q) -(.0000956 + .0000073 * nu2) * sin(ze) * sin(2 * Q) + .0000448 * sin(2 * ze) * sin(2 * Q) + .0000137 * sin(3 * ze) * sin(2 * Q) + (-.0000997 + .0000108 * nu2) * cos(ze) * sin(2 * Q) + .0000480 * cos(2 * ze) * sin(2 * Q); epert = epert + .0000148 * cos(3 * ze) * sin(2 * Q) + (-.0000956 + .0000099 * nu2) * sin(ze) * cos(2 * Q) + .0000490 * sin(2 * ze) * cos(2 * Q) + .0000158 * sin(3 * ze) * cos(2 * Q) + .0000179 * cos(2 * Q) + (.0001024 + .0000075 * nu2) * cos(ze) * cos(2 * Q) -.0000437 * cos(2 * ze) * cos(2 * Q) -.0000132 * cos(3 * ze) * cos(2 * Q); w1pert = (0.007192 - 0.003147 * nu2) * sin(V) + (-0.020428 - 0.000675 * nu2 + 0.000197 * nu2 * nu2) * cos(V) + (0.007269 + 0.000672 * nu2) * sin(ze) * sin(Q) -0.004344 * sin(Q) + 0.034036 * cos(ze) * sin(Q) + 0.005614 * cos(2 * ze) * sin(Q) + 0.002964 * cos(3 * ze) * sin(Q) + 0.037761 * sin(ze) * cos(Q); w1pert = w1pert + 0.006158 * sin(2 * ze) * cos(Q) -0.006603 * cos(ze) * cos(Q) -0.005356 * sin(ze) * sin(2 * Q) + 0.002722 * sin(2 * ze) * sin(2 * Q) + 0.004483 * cos(ze) * sin(2 * Q) -0.002642 * cos(2 * ze) * sin(2 * Q) + 0.004403 * sin(ze) * cos(2 * Q) -0.002536 * sin(2 * ze) * cos(2 * Q) + 0.005547 * cos(ze) * cos(2 * Q) -0.002689 * cos(2 * ze) * cos(2 * Q); lonpert = l1pert - (w1pert / e); l = l + l1pert; M0 = M5 + lonpert; e = e + epert; w1 = w1 + w1pert; apert = -.000263 * cos(V) + .000205 * cos(ze) + .000693 * cos(2 * ze) + .000312 * cos(3 * ze) + .000147 * cos(4 * ze) + .000299 * sin(ze) * sin(Q) + .000181 * cos(2 * ze) * sin(Q) + .000204 * sin(2 * ze) * cos(Q) + .000111 * sin(3 * ze) * cos(Q) -.000337 * cos(ze) * cos(Q) -.000111 * cos(2 * ze) * cos(Q); a = a + apert; ECC = kepler(e, M0); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M0 - w2; ll = longi(w2, i, u); b = lati(u, i); helio_trans(r, b, ll, Stheta, Sr, epli, MAGJUP, "PJ", "Jupiter"); /* Now start Saturn */ a0 = 266.564377; a1 = 1223.509884; a2 = 0.0003245; a3 = -0.0000058; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 9.554747; a0 = 0.05589232; a1 = -0.00034550; a2 = -0.000000728; a3 = 0.00000000074; e = poly(a0, a1, a2, a3, T0); a0 = 2.492519; a1 = -0.0039189; a2 = -0.00001549; a3 = 0.00000004; i = poly(a0, a1, a2, a3, T0); a0 = 338.307800; a1 = 1.0852207; a2 = 0.00097854; a3 = 0.00000992; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 112.790414; a1 = 0.8731951; a2 = -0.00015218; a3 = -0.00000531; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); /* Now Saturn's perturbations */ l1pert = (-0.814181 + 0.018150 * nu2 + 0.016714 * nu2 * nu2) * sin(V) + (-0.010497 + 0.160906 * nu2 - 0.004100 * nu2 * nu2) * cos(V) + 0.007581 * sin(2 * V) -0.007986 * sin(W) -0.148811 * sin(ze) -0.040786 * sin(2 * ze) -0.015208 * sin(3 * ze) -0.006339 * sin(4 * ze) -0.006244 * sin(Q); l1pert = l1pert + (0.008931 + 0.002728 * nu2) * sin(ze) * sin(Q) -0.016500 * sin(2 * ze) * sin(Q) -0.005775 * sin(3 * ze) * sin(Q) + (0.081344 + 0.003206 * nu2) * cos(ze) * sin(Q) + 0.015019 * cos(2 * ze) * sin(Q) + (0.085581 + 0.002494 * nu2) * sin(ze) * cos(Q) + (0.025328 - 0.003117 * nu2) * cos(ze) * cos(Q); l1pert = l1pert + 0.014394 * cos(2 * ze) * cos(Q) + 0.006319 * cos(3 * ze) * cos(Q) + 0.006369 * sin(ze) * sin(2 * Q) + 0.009156 * sin(2 * ze) * sin(2 * Q) + 0.007525 * sin(3 * psi) * sin(2 * Q) -0.005236 * cos(ze) * cos(2 * Q) -0.007736 * cos(2 * ze) * cos(2 * Q) -0.007528 * cos(3 * psi) * cos(2 * Q); epert = (-.0007927 + .0002548 * nu2 + .0000091 * nu2 * nu2) * sin(V) + (.0013381 + .0001226 * nu2 - .0000253 * nu2 * nu2) * cos(V) + (.0000248 - .0000121 * nu2) * sin(2 * V) -(.0000305 + .0000091 * nu2) * cos(2 * V) + .0000412 * sin(2 * ze) + .0012415 * sin(Q) + (.0000390 - .0000617 * nu2) * sin(ze) * sin(Q) + (.0000165 - .0000204 * nu2) * sin(2 * ze) * sin(Q) + .0026599 * cos(ze) * sin(Q) -.0004687 * cos(2 * ze) * sin(Q); epert = epert -.0001870 * cos(3 * ze) * sin(Q) -.0000821 * cos(4 * ze) * sin(Q) -.0000377 * cos(5 * ze) * sin(Q) + .0000497 * cos(2 * psi) * sin(Q) + (.0000163 - .0000611 * nu2) * cos(Q) -.0012696 * sin(ze) * cos(Q) -.0004200 * sin(2 * ze) * cos(Q) -.0001503 * sin(3 * ze) * cos(Q) -.0000619 * sin(4 * ze) * cos(Q) -.0000268 * sin(5 * ze) * cos(Q); epert = epert -(.0000282 + .0001306 * nu2) * cos(ze) * cos(Q) + (-.0000086 + .0000230 * nu2) * cos(2 * ze) * cos(Q) + .0000461 * sin(2 * psi) * cos(Q) -.0000350 * sin(2 * Q) + (.0002211 - .0000286 * nu2) * sin(ze) * sin(2 * Q) -.0002208 * sin(2 * ze) * sin(2 * Q) -.0000568 * sin(3 * ze) * sin(2 * Q) -.0000346 * sin(4 * ze) * sin(2 * Q) -(.0002780 + .0000222 * nu2) * cos(ze) * sin(2 * Q) + (.0002022 + .0000263 * nu2) * cos(2 * ze) * sin(2 * Q); epert = epert + .0000248 * cos(3 * ze) * sin(2 * Q) + .0000242 * sin(3 * psi) * sin(2 * Q) + .0000467 * cos(3 * psi) * sin(2 * Q) -.0000490 * cos(2 * Q) -(.0002842 + .0000279 * nu2) * sin(ze) * cos(2 * Q) + (.0000128 + .0000226 * nu2) * sin(2 * ze) * cos(2 * Q) + .0000224 * sin(3 * ze) * cos(2 * Q) + (-.0001594 + .0000282 * nu2) * cos(ze) * cos(2 * Q) + (.0002162 - .0000207 * nu2) * cos(2 * ze) * cos(2 * Q) + .0000561 * cos(3 * ze) * cos(2 * Q); epert = epert + .0000343 * cos(4 * ze) * cos(2 * Q) + .0000469 * sin(3 * psi) * cos(2 * Q) -.0000242 * cos(3 * psi) * cos(2 * Q) -.0000205 * sin(ze) * sin(3 * Q) + .0000262 * sin(3 * ze) * sin(3 * Q) + .0000208 * cos(ze) * cos(3 * Q) -.0000271 * cos(3 * ze) * cos(3 * Q) -.0000382 * cos(3 * ze) * sin(4 * Q) -.0000376 * sin(3 * ze) * cos(4 * Q); w1pert = (0.077108 + 0.007186 * nu2 - 0.001533 * nu2 * nu2) * sin(V) + (0.045803 - 0.014766 * nu2 - 0.000536 * nu2 * nu2) * cos(V) -0.007075 * sin(ze) -0.075825 * sin(ze) * sin(Q) -0.024839 * sin(2 * ze) * sin(Q) -0.008631 * sin(3 * ze) * sin(Q) -0.072586 * cos(Q) -0.150383 * cos(ze) * cos(Q) + 0.026897 * cos(2 * ze) * cos(Q) + 0.010053 * cos(3 * ze) * cos(Q); w1pert = w1pert -(0.013597 + 0.001719 * nu2) * sin(ze) * sin(2 * Q) + (-0.007742 + 0.001517 * nu2) * cos(ze) * sin(2 * Q) + (0.013586 - 0.001375 * nu2) * cos(2 * ze) * sin(2 * Q) + (-0.013667 + 0.001239 * nu2) * sin(ze) * cos(2 * Q) + 0.011981 * sin(2 * ze) * cos(2 * Q) + (0.014861 + 0.001136 * nu2) * cos(ze) * cos(2 * Q) -(0.013064 + 0.001628 * nu2) * cos(2 * ze) * cos(2 * Q); lonpert = l1pert - (w1pert / e); l = l + l1pert; M0 = M6 + lonpert; e = e + epert; w1 = w1 + w1pert; apert = .000572 * sin(V) - .001590 * sin(2 * ze) * cos(Q) + .002933 * cos(V) - .000647 * sin(3 * ze) * cos(Q) + .033629 * cos(ze) - .000344 * sin(4 * ze) * cos(Q) -.003081 * cos(2 * ze) + .002885 * cos(ze) * cos(Q) -.001423 * cos(3 * ze) + (.002172 + .000102 * nu2) * cos(2 * ze) * cos(Q) -.000671 * cos(4 * ze) + .000296 * cos(3 * ze) * cos(Q) -.000320 * cos(5 * ze) - .000267 * sin(2 * ze) * sin(2 * Q); apert = apert + .001098 * sin(Q) - .000778 * cos(ze) * sin(2 * Q) -.002812 * sin(ze) * sin(Q) + .000495 * cos(2 * ze) * sin(2 * Q) + .000688 * sin(2 * ze) * sin(Q) + .000250 * cos(3 * ze) * sin(2 * Q); apert = apert -.000393 * sin(3 * ze) * sin(Q) -.000228 * sin(4 * ze) * sin(Q) + .002138 * cos(ze) * sin(Q) -.000999 * cos(2 * ze) * sin(Q) -.000642 * cos(3 * ze) * sin(Q) -.000325 * cos(4 * ze) * sin(Q) -.000890 * cos(Q) + .002206 * sin(ze) * cos(Q); apert = apert -.000856 * sin(ze) * cos(2 * Q) + .000441 * sin(2 * ze) * cos(2 * Q) + .000296 * cos(2 * ze) * cos(2 * Q) + .000211 * cos(3 * ze) * cos(2 * Q) -.000427 * sin(ze) * sin(3 * Q) + .000398 * sin(3 * ze) * sin(3 * Q) + .000344 * cos(ze) * cos(3 * Q) -.000427 * cos(3 * ze) * cos(3 * Q); a = a + apert; ECC = kepler(e, M0); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M0 - w2; ll = longi(w2, i, u); b = lati(u, i); b = b + 0.000747 * cos(ze) * sin(Q) + 0.001069 * cos(ze) * cos(Q) + 0.002108 * sin(2 * ze) * sin(2 * Q) + 0.001261 * cos(2 * ze) * sin(2 * Q) + 0.001236 * sin(2 * ze) * cos(2 * Q) -0.002075 * cos(2 * ze) * cos(2 * Q); helio_trans(r, b, ll, Stheta, Sr, epli, MAGSAT, "Ps", "Saturn"); /* Now Start on Uranus */ a0 = 244.197470; a1 = 429.863546; a2 = 0.0003160; a3 = -0.00000060; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 19.21814; a0 = 0.0463444; a1 = -0.00002658; a2 = 0.000000077; a3 = 0.0; e = poly(a0, a1, a2, a3, T0); a0 = 0.772464; a1 = 0.0006253; a2 = 0.0000395; i = poly(a0, a1, a2, a3, T0); a0 = 98.071581; a1 = 0.9857650; a2 = -0.0010745; a3 = -0.00000061; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 73.477111; a1 = 0.4986678; a2 = 0.0013117; a3 = 0.0; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); M7 = 72.64878 + 428.37911 * T0 + 0.000079 * T0 * T0; M7 = range(M7); /* now perturbation corrections for Uranus */ G = 83.76922 + 218.4901 * T0; S = S / rad; P = P / rad; Q = Q / rad; H = 2.0 * G - S; ze = S - P; eta = S - Q; th = G - S; S = S * rad; G = range(G) * rad; P = P * rad; Q = Q * rad; H = range(H) * rad; ze = range(ze) * rad; eta = range(eta) * rad; th = range(th) * rad; l1pert = (0.864319 - 0.001583 * nu2) * sin(H) + (0.082222 - 0.006833 * nu2) * cos(H) + 0.036017 * sin(2 * H) -0.003019 * cos(2 * H) + 0.008122 * sin(W); epert = (-.0003349 + .0000163 * nu2) * sin(H) + .0020981 * cos(H) + .0001311 * cos(H); w1pert = 0.120303 * sin(H) + (0.019472 - 0.000947 * nu2) * cos(H) + 0.006197 * sin(2 * H); lonpert = l1pert - (w1pert / e); l = l + l1pert; M0 = M7 + lonpert; e = e + epert; w1 = w1 + w1pert; a = a - 0.003825 * cos(H); ECC = kepler(e, M0); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M0 - w2; ll = longi(w2, i, u); b = lati(u, i); ll = ll + (0.010122 - 0.000988 * nu2) * sin(S + eta) + (-0.038581 + 0.002031 * nu2 - 0.001910 * nu2 * nu2) * cos(S + eta) + (0.034964 - 0.001038 * nu2 + 0.000868 * nu2 * nu2) * cos(2 * S + eta) + 0.005594 * sin(S + 3 * th); ll = ll -0.014808 * sin(ze) -0.005794 * sin(eta) + 0.002347 * cos(eta) + 0.009872 * sin(th) + 0.008803 * sin(2 * th) -0.004308 * sin(3 * th); b = b + (0.000458 * sin(eta) - 0.000642 * cos(eta) - 0.000517 * cos(4 * th)) *sin(S) -(0.000347 * sin(eta) + 0.000853 * cos(eta) + 0.000517 * sin(4 * eta)) *cos(S) + 0.000403 * (cos(2 * th) * sin(2 * S) + sin(2 * th) * cos(2 * S)); r = r -.025948 + .004985 * cos(ze) -.001230 * cos(S) + .003354 * cos(eta) + (.005795 * cos(S) - .001165 * sin(S) + .001388 * cos(2 * S)) * sin(eta) + (.001351 * cos(S) + .005702 * sin(S) + .001388 * sin(2 * S)) * cos(eta) + .000904 * cos(2 * th) + .000894 * (cos(th) - cos(3 * th)); helio_trans(r, b, ll, Stheta, Sr, epli, MAGURA, "PU", "Uranus"); /* Now start Neptune */ a0 = 84.457994; a1 = 219.885914; a2 = 0.0003205; a3 = -0.00000060; l = poly(a0, a1, a2, a3, T0); l = range(l); a = 30.10957; a0 = 0.00899704; a1 = 0.000006330; a2 = -0.000000002; a3 = 0.0; e = poly(a0, a1, a2, a3, T0); a0 = 1.779242; a1 = -0.0095436; a2 = -0.0000091; i = poly(a0, a1, a2, a3, T0); a0 = 276.045975; a1 = 0.3256394; a2 = 0.00014095; a3 = 0.000004113; w1 = poly(a0, a1, a2, a3, T0); w1 = range(w1); a0 = 130.681389; a1 = 1.0989350; a2 = 0.00024987; a3 = -0.000004718; w2 = poly(a0, a1, a2, a3, T0); w2 = range(w2); M8 = 37.73063 + 218.46134 * T0 - 0.000070 * T0 * T0; /* now perturbation corrections for neptune */ G = G / rad; P = P / rad; Q = Q / rad; S = S / rad; ze = G - P; eta = G - Q; th = G - S; G = G * rad; P = P * rad; Q = Q * rad; S = S * rad; ze = range(ze) * rad; eta = range(eta) * rad; th = range(th) * rad; l1pert = (-0.589833 + 0.001089 * nu2) * sin(H) + (-0.056094 + 0.004658 * nu2) * cos(H) -0.024286 * sin(2 * H); epert = .0004389 * sin(H) + .0004262 * cos(H) + .0001129 * sin(2 * H) + .0001089 * cos(2 * H); w1pert = 0.024039 * sin(H) -0.025303 * cos(H) + 0.006206 * sin(2 * H) -0.005992 * cos(2 * H); lonpert = l1pert - (w1pert / e); l = l + l1pert; M0 = M8 + lonpert; e = e + epert; w1 = w1 + w1pert; a = a - 0.000817 * sin(H) + 0.008189 * cos(H) + 0.000781 * cos(2 * H); ECC = kepler(e, M0); nu = truean(e, ECC); r = a * (1.0 - e * cos(ECC * rad)); u = l + nu - M0 - w2; ll = longi(w2, i, u); b = lati(u, i); ll = ll -0.009556 * sin(ze) -0.005178 * sin(eta) + 0.002572 * sin(2 * th) -0.002972 * cos(2 * th) * sin(G) -0.002833 * sin(2 * th) * cos(G); b = b + 0.000336 * cos(2 * th) * sin(G) + 0.000364 * sin(2 * th) * cos(G); r = r -.040596 + .004992 * cos(ze) + .002744 * cos(eta) + .002044 * cos(th) + .001051 * cos(2 * th); helio_trans(r, b, ll, Stheta, Sr, epli, MAGNEP, "PN", "Neptune"); return epli; }