home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************************
- ** Compute the position of the major planets and return the epli value. **
- *******************************************************************************/
-
- #include <stdio.h>
- #include <math.h>
-
- #define RAD 0.01745329251994329651
-
- /*******************************************************************************
- ** Crude magnitudes of planets (x100) for output filtering by brightness. **
- ***************************************************************************** */
-
- #define MAGSOL -9.9
- #define MAGMER -1.5
- #define MAGVEN -4.0
- #define MAGMAR -1.0
- #define MAGJUP -2.0
- #define MAGSAT 1.0
- #define MAGURA 5.9
- #define MAGNEP 8.0
-
- double planet_pos(jd,T0)
- double jd,T0;
- {
- double M0,M1,M2,M4,M5,M6,M7,M8,D,G,H,M,N,P,Q,S,V,W,RA,DEC,ECC;
- double sinQ,cosQ,sin2Q,cos2Q,sin3Q,cos3Q,sin4Q,cos4Q;
- double sinze,cosze,sin2ze,cos2ze,sin3ze,cos3ze,sin4ze,cos4ze;
- double sinps,cosps,sin2ps,cos2ps,sin3ps,cos3ps;
- double sinH,cosH,sin2H,cos2H,sinG,cosG;
- double sinV,cosV,sin2V,cos2V,sinS,cosS,sin2S,cos2S;
- double w1,w2,a,b,e,i,l,ll,r,u,nu,nu2,psi,eta,th,ze,epli,thapp,omeg;
- double l1pert,w1pert;
- double esun,Cen,Stheta,Sr;
-
- double kepler(),truean(),longi(),lati(),poly(),range();
- void helio_trans(),speak();
-
- /*******************************************************************************
- ** Calculate orbital elements for Mercury. **
- *******************************************************************************/
- l = range(poly(178.179078,149474.07078,0.0003011,0.,T0));
-
- a = 0.3870986;
-
- e = poly(0.20561421,0.00002046,-0.000000030,0.,T0);
- i = poly(7.00288100,0.00186080,-0.000018300,0.,T0);
-
- w1 = range(poly(28.753753,0.3702806,0.0001208,0.,T0));
- w2 = range(poly(47.145944,1.1852083,0.0001739,0.,T0));
-
- M1 = range(poly(102.27938,149472.51529,0.000007,0.,T0));
-
- /*******************************************************************************
- ** Solving Kepler find the eccentric anomaly ECC. **
- *******************************************************************************/
- ECC = kepler(e,M1);
- nu = truean(e,ECC);
- r = a * (1. - 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 = range(poly(212.60322,58517.80387, 0.001286,0.,T0));
- M4 = range(poly(319.51913,19139.85475, 0.000181,0.,T0));
- M5 = range(poly(225.32833, 3034.69202,-0.000722,0.,T0));
- M6 = range(poly(175.46622, 1221.55147,-0.000502,0.,T0));
-
- ll += 0.00204 * cos((-2. * M1 + 5. * M2 + 12.220) * RAD)
- + 0.00103 * cos(( -M1 + 2. * M2 - 160.692) * RAD)
- + 0.00091 * cos(( -M1 + 2. * M5 - 37.003) * RAD)
- + 0.00078 * cos((-3. * M1 + 5. * M2 + 10.137) * RAD);
-
- r += 0.000007525 * cos(( -M1 + 2. * M5 + 53.013) * RAD)
- + 0.000006802 * cos((-3. * M1 + 5. * M2 - 259.918) * RAD)
- + 0.000005457 * cos((-2. * M1 + 2. * M2 - 71.188) * RAD)
- + 0.000003569 * cos(( -M1 + 5. * M2 - 77.750) * RAD);
-
- /*******************************************************************************
- ** Now find the Longi and radius vector of the sun. **
- *******************************************************************************/
- M = range(poly(358.47583,35999.0497500,-0.0001500,-0.0000033,T0));
-
- esun = poly(0.01675104,-0.0000418,-0.000000126,0.,T0);
-
- Cen = poly(1.919460,-0.004789,-0.000014,0.,T0) * sin( M * RAD) +
- poly(0.020094,-0.000100, 0. ,0.,T0) * sin(2. * M * RAD) +
- poly(0.000293, 0. , 0. ,0.,T0) * sin(3. * M * RAD);
-
- Stheta = range(Cen + range(poly(279.69668,36000.76892,0.0003025,0.,T0)));
-
- Sr = 1.0000002 * (1. - esun * esun) / (1. + esun * cos((M + Cen) * RAD));
-
- omeg = 259.18 - 1934.142 * T0;
- thapp = Stheta - 0.00569 - 0.00479 * sin(omeg * RAD);
- epli = poly(23.45229400,-0.013012500,-0.000001640,0.000000503,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;
-
- #ifdef EUTSCH
- speak(RA,DEC,Sr,MAGSOL,"PS","Sonne");
- #else
- speak(RA,DEC,Sr,MAGSOL,"PS","Sol");
- #endif
-
- /*******************************************************************************
- ** Tansformation of coordinates on Mercury and output. **
- *******************************************************************************/
- #ifdef EUTSCH
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGMER,"PM","Merkur");
- #else
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGMER,"PM","Mercury");
- #endif
-
- /*******************************************************************************
- ** Now start on Venus. **
- *******************************************************************************/
- l = range(poly(342.767053,58519.21191,0.0003097,0.,T0));
-
- a = 0.7233316;
-
- e = poly(0.00682069,-0.00004774, 0.000000091,0.,T0);
- i = poly(3.39363100, 0.00100580,-0.000001000,0.,T0);
-
- w1 = range(poly(54.384186,0.5081861,-0.0013864,0.,T0));
- w2 = range(poly(75.779647,0.8998500, 0.0004100,0.,T0));
-
- /*******************************************************************************
- ** Venus has a long period pert that needs to be added before Kelper. **
- *******************************************************************************/
- M0 = M2 + 0.00077 * sin((237.24 + 150.27 * T0) * RAD);
-
- l += M0 - M2;
- ECC = kepler(e,M0);
- nu = truean(e,ECC);
- r = a * (1. - e * cos(ECC * RAD));
- u = l + nu - M0 - w2;
- ll = longi(w2,i,u);
- b = lati(u,i);
-
- /*******************************************************************************
- ** Now Venus perturbations. **
- *******************************************************************************/
- ll += 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);
-
- r += 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);
-
- /*******************************************************************************
- ** Tansformation of coordinates on Venus and output. **
- *******************************************************************************/
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGVEN,"PV","Venus");
-
- /*******************************************************************************
- ** Now start the planet Mars. **
- *******************************************************************************/
- l = range(poly(293.737334,19141.69551,0.0003107,0.,T0));
-
- a = 1.5236883;
-
- e = poly(0.09331290, 0.000092064,-0.000000077,0.,T0);
- i = poly(1.85033300,-0.000675000, 0.000012600,0.,T0);
-
- w1 = range(poly(285.431761,1.0697667, 0.0001313, 0.00000414,T0));
- w2 = range(poly( 48.786442,0.7709917,-0.0000014,-0.00000533,T0));
-
- /*******************************************************************************
- ** Mars has a long period perturbation. **
- *******************************************************************************/
- M0 = M4 + -0.01133 * sin((3. * M5 - 8. * M4 + 4. * M) * RAD)
- -0.00933 * cos((3. * M5 - 8. * M4 + 4. * M) * RAD);
-
- l += M0 - M4;
- ECC = kepler(e,M0);
- nu = truean(e,ECC);
- r = a * (1. - e * cos(ECC * RAD));
- u = l + nu - M0 - w2;
- ll = longi(w2,i,u);
- b = lati(u,i);
-
- /*******************************************************************************
- ** Now Mars Perturbations. **
- *******************************************************************************/
- ll += 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(( -M2 + 3. * M4 - 57.602) * RAD)
- + 0.00136 * cos((2. * M - 4. * M4 + 154.093) * RAD)
- + 0.00104 * cos(( M5 + 17.618) * RAD);
-
- r += 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.5550) * RAD)
- + 0.000014764 * cos((2. * M - 3. * M4 + 68.6220) * RAD)
- + 0.000008966 * cos(( M5 - 2. * M4 + 43.6150) * RAD)
- + 0.000007914 * cos((3. * M5 - 2. * M4 - 139.7370) * RAD)
- + 0.000007004 * cos((2. * M5 - 3. * M4 - 102.8880) * RAD)
- + 0.000006620 * cos(( M - 2. * M4 + 113.2020) * RAD)
- + 0.000004930 * cos((3. * M5 - 3. * M4 - 76.2430) * RAD)
- + 0.000004693 * cos((3. * M - 5. * M4 + 190.6030) * RAD)
- + 0.000004571 * cos((2. * M - 4. * M4 + 244.7020) * RAD)
- + 0.000004409 * cos((3. * M5 - M4 - 115.8280) * RAD);
-
- /*******************************************************************************
- ** Tansformation of coordinates on Mars and output. **
- *******************************************************************************/
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGMAR,"Pm","Mars");
-
- /*******************************************************************************
- ** Now start Jupiter. **
- *******************************************************************************/
- l = range(poly(238.049257,3036.301986,0.0003347,-0.00000165,T0));
-
- a = 5.202561;
-
- e = poly(0.04833475, 0.000164180,-0.0000004676,-0.0000000017,T0);
- i = poly(1.30873600,-0.005696100, 0.0000039000, 0.0000000000,T0);
-
- w1 = range(poly(273.277558,0.5994317,0.00070405, 0.00000508,T0));
- w2 = range(poly( 99.443414,1.0105300,0.00035222,-0.00000851,T0));
-
- /*******************************************************************************
- ** Now start perturbation calclations. **
- *******************************************************************************/
- nu2 = T0 / 5. + 0.1;
-
- P = 237.47555 + 3034.9061 * T0;
- Q = 265.91650 + 1222.1139 * T0;
- S = 243.51721 + 428.4677 * T0;
-
- V = range(5. * Q - 2. * P) * RAD;
- W = range(2. * P - 6. * Q + 3. * S) * RAD;
-
- ze = range(Q - P) * RAD;
- psi = range(S - Q) * RAD;
-
- P = range(P) * RAD;
- Q = range(Q) * RAD;
- S = range(S) * RAD;
-
- /*******************************************************************************
- ** An extreme acceleration can be achieved by using the addtion theorems. **
- *******************************************************************************/
- sinQ = sin(Q);
- cosQ = cos(Q);
-
- sin2Q = 2. * sinQ * cosQ;
- cos2Q = cosQ*cosQ - sinQ*sinQ;
-
- sin3Q = ( 3. - 4. * sinQ * sinQ) * sinQ;
- cos3Q = (- 3. + 4. * cosQ * cosQ) * cosQ;
-
- sin4Q = (8. * cosQ * cosQ - 4.) * cosQ * sinQ;
- cos4Q = 8. * cosQ * cosQ * ( cosQ * cosQ - 1. ) + 1.;
-
- /*******************************************************************************/
- sinze = sin(ze);
- cosze = cos(ze);
-
- sin2ze = 2. * sinze * cosze;
- cos2ze = cosze*cosze - sinze*sinze;
-
- sin3ze = ( 3. - 4. * sinze * sinze) * sinze;
- cos3ze = (- 3. + 4. * cosze * cosze) * cosze;
-
- sin4ze = (8. * cosze * cosze - 4.) * cosze * sinze;
- cos4ze = 8. * cosze * cosze * (cosze * cosze - 1. ) + 1.;
-
- /*******************************************************************************/
- sinV = sin(V);
- cosV = cos(V);
-
- sin2V = 2. * sinV * cosV;
- cos2V = cosV * cosV - sinV * sinV;
-
- /*******************************************************************************/
- sinS = sin(S); cosS = cos(S);
- sin2S = 2. * sinS * cosS; cos2S = cosS * cosS - sinS * sinS;
-
- /*******************************************************************************/
- sinps = sin(psi);
- cosps = cos(psi);
-
- sin2ps = 2. * sinps * cosps;
- cos2ps = cosps*cosps - sinps*sinps;
-
- sin3ps = ( 3. - 4. * sinps * sinps) * sinps;
- cos3ps = (- 3. + 4. * cosps * cosps) * cosps;
-
- /*******************************************************************************
- ** Calculating the perturbation terms. **
- *******************************************************************************/
- l1pert = poly(0.331364,-0.010281,-0.004692,0.,nu2) * sinV
- + poly(0.003228,-0.064436, 0.002075,0.,nu2) * cosV
- - poly(0.003083, 0.000275,-0.000489,0.,nu2) * sin2V
- + 0.002472 * sin(W)
- + 0.013619 * sinze
- + 0.018472 * sin2ze
- + 0.006717 * sin3ze
- + 0.002775 * sin4ze
- + (0.007275 - 0.001253 * nu2) * sinze * sinQ
- + 0.006417 * sin2ze * sinQ
- + 0.002439 * sin3ze * sinQ
- - (0.033839 + 0.001125 * nu2) * cosze * sinQ
- - 0.003767 * cos2ze * sinQ
- - (0.035681 + 0.001208 * nu2) * sinze * cosQ
- - 0.004261 * sin2ze * cosQ
- + 0.002178 * cosQ
- - (0.006333 - 0.001161 * nu2) * cosze * cosQ
- - 0.006675 * cos2ze * cosQ
- - 0.002664 * cos3ze * cosQ
- - 0.002572 * sinze * sin2Q
- - 0.003567 * sin2ze * sin2Q
- + 0.002094 * cosze * cos2Q
- + 0.003342 * cos2ze * cos2Q;
-
- w1pert = (0.007192 - 0.003147 * nu2) * sinV
- - poly(0.020428,0.000675,-0.000197,0.,nu2) * cosV
- + (0.007269 + 0.000672 * nu2) * sinze * sinQ
- - 0.004344 * sinQ
- + 0.034036 * cosze * sinQ
- + 0.005614 * cos2ze * sinQ
- + 0.002964 * cos3ze * sinQ
- + 0.037761 * sinze * cosQ
- + 0.006158 * sin2ze * cosQ
- - 0.006603 * cosze * cosQ
- - 0.005356 * sinze * sin2Q
- + 0.002722 * sin2ze * sin2Q
- + 0.004483 * cosze * sin2Q
- - 0.002642 * cos2ze * sin2Q
- + 0.004403 * sinze * cos2Q
- - 0.002536 * sin2ze * cos2Q
- + 0.005547 * cosze * cos2Q
- - 0.002689 * cos2ze * cos2Q;
-
- l += l1pert;
- w1 += w1pert;
-
- M0 = M5 + l1pert - (w1pert / e);
-
- e += poly(0.0003606, 0.0000130,-0.0000043,0.,nu2) * sinV
- + poly(0.0001289,-0.0000580,0. ,0.,nu2) * cosV
- - 0.0006764 * sinze * sinQ
- - 0.0001110 * sin2ze * sinQ
- - 0.0000224 * sin3ze * sinQ
- - 0.0000204 * sinQ
- + (0.0001284 + 0.0000116 * nu2) * cosze * sinQ
- + 0.0000188 * cos2ze * sinQ
- + (0.0001460 + 0.0000130 * nu2) * sinze * cosQ
- + 0.0000224 * sin2ze * cosQ
- - 0.0000817 * cosQ
- + 0.0006074 * cosze * cosQ
- + 0.0000992 * cos2ze * cosQ
- + 0.0000508 * cos3ze * cosQ
- + 0.0000230 * cos4ze * cosQ
- + 0.0000108 * cos(5. * ze) * cosQ
- - (0.0000956 + 0.0000073 * nu2) * sinze * sin2Q
- + 0.0000448 * sin2ze * sin2Q
- + 0.0000137 * sin3ze * sin2Q
- - (0.0000997 - 0.0000108 * nu2) * cosze * sin2Q
- + 0.0000480 * cos2ze * sin2Q
- + 0.0000148 * cos3ze * sin2Q
- - (0.0000956 - 0.0000099 * nu2) * sinze * cos2Q
- + 0.0000490 * sin2ze * cos2Q
- + 0.0000158 * sin3ze * cos2Q
- + 0.0000179 * cos2Q
- + (0.0001024 + 0.0000075 * nu2) * cosze * cos2Q
- - 0.0000437 * cos2ze * cos2Q
- - 0.0000132 * cos3ze * cos2Q;
-
- a += -0.000263 * cosV
- + 0.000205 * cosze
- + 0.000693 * cos2ze
- + 0.000312 * cos3ze
- + 0.000147 * cos4ze
- + 0.000299 * sinze * sinQ
- + 0.000181 * cos2ze * sinQ
- + 0.000204 * sin2ze * cosQ
- + 0.000111 * sin3ze * cosQ
- - 0.000337 * cosze * cosQ
- - 0.000111 * cos2ze * cosQ;
-
- ECC = kepler(e,M0);
- nu = truean(e,ECC);
- r = a * (1. - e * cos(ECC * RAD));
- u = l + nu - M0 - w2;
- ll = longi(w2,i,u);
- b = lati(u,i);
-
- /*******************************************************************************
- ** Tansformation of coordinates on Jupiter and output. **
- *******************************************************************************/
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGJUP,"PJ","Jupiter");
-
- /*******************************************************************************
- ** Now start Saturn. **
- *******************************************************************************/
- l = range(poly(266.564377,1223.509884,0.0003245,-0.0000058,T0));
-
- a = 9.554747;
-
- e = poly(0.05589232,-0.00034550,-0.000000728,0.00000000074,T0);
- i = poly(2.49251900,-0.00391890,-0.000015490,0.00000004000,T0);
-
- w1 = range(poly(338.307800,1.0852207, 0.00097854, 0.00000992,T0));
- w2 = range(poly(112.790414,0.8731951,-0.00015218,-0.00000531,T0));
-
- /*******************************************************************************
- ** Now Saturn's perturbations. **
- *******************************************************************************/
- l1pert = poly(-0.814181,0.018150, 0.016714,0.,nu2) * sinV
- + poly(-0.010497,0.160906,-0.004100,0.,nu2) * cosV
- + 0.007581 * sin2V
- - 0.007986 * sin(W)
- - 0.148811 * sinze
- - 0.040786 * sin2ze
- - 0.015208 * sin3ze
- - 0.006339 * sin4ze
- - 0.006244 * sinQ
- + ( 0.008931 + 0.002728 * nu2) * sinze * sinQ
- - 0.016500 * sin2ze * sinQ
- - 0.005775 * sin3ze * sinQ
- + ( 0.081344 + 0.003206 * nu2) * cosze * sinQ
- + 0.015019 * cos2ze * sinQ
- + ( 0.085581 + 0.002494 * nu2) * sinze * cosQ
- + ( 0.025328 - 0.003117 * nu2) * cosze * cosQ
- + 0.014394 * cos2ze * cosQ
- + 0.006319 * cos3ze * cosQ
- + 0.006369 * sinze * sin2Q
- + 0.009156 * sin2ze * sin2Q
- + 0.007525 * sin3ps * sin2Q
- - 0.005236 * cosze * cos2Q
- - 0.007736 * cos2ze * cos2Q
- - 0.007528 * cos3ps * cos2Q;
-
- w1pert = poly(0.077108, 0.007186,-0.001533,0.,nu2) * sinV
- + poly(0.045803,-0.014766,-0.000536,0.,nu2) * cosV
- - 0.007075 * sinze
- - 0.075825 * sinze * sinQ
- - 0.024839 * sin2ze * sinQ
- - 0.008631 * sin3ze * sinQ
- - 0.072586 * cosQ
- - 0.150383 * cosze * cosQ
- + 0.026897 * cos2ze * cosQ
- + 0.010053 * cos3ze * cosQ
- - ( 0.013597 + 0.001719 * nu2) * sinze * sin2Q
- + (-0.007742 + 0.001517 * nu2) * cosze * sin2Q
- + ( 0.013586 - 0.001375 * nu2) * cos2ze * sin2Q
- + (-0.013667 + 0.001239 * nu2) * sinze * cos2Q
- + 0.011981 * sin2ze * cos2Q
- + ( 0.014861 + 0.001136 * nu2) * cosze * cos2Q
- - ( 0.013064 + 0.001628 * nu2) * cos2ze * cos2Q;
-
- l += l1pert;
- w1 += w1pert;
-
- M0 = M6 + l1pert - (w1pert / e);
-
- e += poly(-0.0007927,0.0002548, 0.0000091,0.,nu2) * sinV
- + poly( 0.0013381,0.0001226,-0.0000253,0.,nu2) * cosV
- + ( 0.0000248 - 0.0000121 * nu2) * sin2V
- - ( 0.0000305 + 0.0000091 * nu2) * cos2V
- + 0.0000412 * sin2ze
- + 0.0012415 * sinQ
- + ( 0.0000390 - 0.0000617 * nu2) * sinze * sinQ
- + ( 0.0000165 - 0.0000204 * nu2) * sin2ze * sinQ
- + 0.0026599 * cosze * sinQ
- - 0.0004687 * cos2ze * sinQ
- - 0.0001870 * cos3ze * sinQ
- - 0.0000821 * cos4ze * sinQ
- - 0.0000377 * cos(5. * ze) * sinQ
- + 0.0000497 * cos2ps * sinQ
- + ( 0.0000163 - 0.0000611 * nu2) * cosQ
- - 0.0012696 * sinze * cosQ
- - 0.0004200 * sin2ze * cosQ
- - 0.0001503 * sin3ze * cosQ
- - 0.0000619 * sin4ze * cosQ
- - 0.0000268 * sin(5. * ze) * cosQ
- - ( 0.0000282 + 0.0001306 * nu2) * cosze * cosQ
- + (-0.0000086 + 0.0000230 * nu2) * cos2ze * cosQ
- + 0.0000461 * sin2ps * cosQ
- - 0.0000350 * sin2Q
- + ( 0.0002211 - 0.0000286 * nu2) * sinze * sin2Q
- - 0.0002208 * sin2ze * sin2Q
- - 0.0000568 * sin3ze * sin2Q
- - 0.0000346 * sin4ze * sin2Q
- - ( 0.0002780 + 0.0000222 * nu2) * cosze * sin2Q
- + ( 0.0002022 + 0.0000263 * nu2) * cos2ze * sin2Q
- + 0.0000248 * cos3ze * sin2Q
- + 0.0000242 * sin3ps * sin2Q
- + 0.0000467 * cos3ps * sin2Q
- - 0.0000490 * cos2Q
- - ( 0.0002842 + 0.0000279 * nu2) * sinze * cos2Q
- + ( 0.0000128 + 0.0000226 * nu2) * sin2ze * cos2Q
- + 0.0000224 * sin3ze * cos2Q
- + (-0.0001594 + 0.0000282 * nu2) * cosze * cos2Q
- + ( 0.0002162 - 0.0000207 * nu2) * cos2ze * cos2Q
- + 0.0000561 * cos3ze * cos2Q
- + 0.0000343 * cos4ze * cos2Q
- + 0.0000469 * sin3ps * cos2Q
- - 0.0000242 * cos3ps * cos2Q
- - 0.0000205 * sinze * sin3Q
- + 0.0000262 * sin3ze * sin3Q
- + 0.0000208 * cosze * cos3Q
- - 0.0000271 * cos3ze * cos3Q
- - 0.0000382 * cos3ze * sin4Q
- - 0.0000376 * sin3ze * cos4Q;
-
- a += 0.000572 * sinV
- - 0.001590 * sin2ze * cosQ
- + 0.002933 * cosV
- - 0.000647 * sin3ze * cosQ
- + 0.033629 * cosze
- - 0.000344 * sin4ze * cosQ
- - 0.003081 * cos2ze
- + 0.002885 * cosze * cosQ
- - 0.001423 * cos3ze
- + (0.002172 + 0.000102 * nu2) * cos2ze * cosQ
- - 0.000671 * cos4ze
- + 0.000296 * cos3ze * cosQ
- - 0.000320 * cos(5. * ze)
- - 0.000267 * sin2ze * sin2Q
- + 0.001098 * sinQ
- - 0.000778 * cosze * sin2Q
- - 0.002812 * sinze * sinQ
- + 0.000495 * cos2ze * sin2Q
- + 0.000688 * sin2ze * sinQ
- + 0.000250 * cos3ze * sin2Q
- - 0.000393 * sin3ze * sinQ
- - 0.000228 * sin4ze * sinQ
- + 0.002138 * cosze * sinQ
- - 0.000999 * cos2ze * sinQ
- - 0.000642 * cos3ze * sinQ
- - 0.000325 * cos4ze * sinQ
- - 0.000890 * cosQ
- + 0.002206 * sinze * cosQ
- - 0.000856 * sinze * cos2Q
- + 0.000441 * sin2ze * cos2Q
- + 0.000296 * cos2ze * cos2Q
- + 0.000211 * cos3ze * cos2Q
- - 0.000427 * sinze * sin3Q
- + 0.000398 * sin3ze * sin3Q
- + 0.000344 * cosze * cos3Q
- - 0.000427 * cos3ze * cos3Q;
-
- ECC = kepler(e,M0);
- nu = truean(e,ECC);
- r = a * (1. - e * cos(ECC * RAD));
- u = l + nu - M0 - w2;
- ll = longi(w2,i,u);
-
- b = lati(u,i)
- + 0.000747 * cosze * sinQ
- + 0.001069 * cosze * cosQ
- + 0.002108 * sin2ze * sin2Q
- + 0.001261 * cos2ze * sin2Q
- + 0.001236 * sin2ze * cos2Q
- - 0.002075 * cos2ze * cos2Q;
-
- /*******************************************************************************
- ** Tansformation of coordinates on Saturn and output. **
- *******************************************************************************/
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGSAT,"Ps","Saturn");
-
- /*******************************************************************************
- ** Now Start on Uranus. **
- *******************************************************************************/
- l = range(poly(244.197470,429.863546,0.0003160,-0.00000060,T0));
-
- a = 19.21814;
-
- e = poly(0.0463444,-0.00002658,0.000000077,0.,T0);
- i = poly(0.7724640, 0.00062530,0.000039500,0.,T0);
-
- w1 = range(poly(98.071581,0.9857650,-0.0010745,-0.00000061,T0));
- w2 = range(poly(73.477111,0.4986678, 0.0013117, 0.00000000,T0));
-
- M7 = range(poly(72.64878,428.37911,0.000079,0.,T0));
-
- /*******************************************************************************
- ** Now perturbation corrections for Uranus. **
- *******************************************************************************/
- G = (83.76922 + 218.4901 * T0) * RAD;
-
- H = range((2. * G - S) / RAD) * RAD;
- ze = range(( S - P) / RAD) * RAD;
- eta = range(( S - Q) / RAD) * RAD;
- th = range(( G - S) / RAD) * RAD;
-
- G = range(G / RAD) * RAD;
-
- /*******************************************************************************
- ** Addition theorems. **
- *******************************************************************************/
- sinze = sin(ze); cosze = cos(ze);
-
- sinH = sin(H); cosH = cos(H);
- sin2H = 2. * sinH * cosH; cos2H = cosH * cosH - sinH * sinH;
-
- sinG = sin(G); cosG = cos(G);
-
- /******************************************************************************/
-
- l1pert = (0.864319 - 0.001583 * nu2) * sinH
- + (0.082222 - 0.006833 * nu2) * cosH
- + 0.036017 * sin2H
- - 0.003019 * cos2H
- + 0.008122 * sin(W);
-
- w1pert = 0.120303 * sinH
- + (0.019472 - 0.000947 * nu2) * cosH
- + 0.006197 * sin2H;
-
- l += l1pert;
- w1 += w1pert;
-
- M0 = M7 + l1pert - (w1pert / e);
-
- e += (-0.0003349 + 0.0000163 * nu2) * sinH
- + 0.0020981 * cosH
- + 0.0001311 * cosH;
-
- a -= 0.003825 * cosH;
-
- ECC = kepler(e,M0);
- nu = truean(e,ECC);
- r = a * (1. - e * cos(ECC * RAD));
- u = l + nu - M0 - w2;
- ll = longi(w2,i,u);
- b = lati(u,i);
-
- ll += (0.010122 - 0.000988 * nu2) * sin( eta + S)
- + poly(-0.038581, 0.002031,-0.001910,0.,nu2) * cos( eta + S)
- + poly( 0.034964,-0.001038, 0.000868,0.,nu2) * cos( eta + 2. * S)
- + 0.005594 * sin(3. * th + S)
- - 0.014808 * sinze
- - 0.005794 * sin( eta)
- + 0.002347 * cos( eta)
- + 0.009872 * sin( th)
- + 0.008803 * sin(2. * th)
- - 0.004308 * sin(3. * th);
-
- b += (0.000458 * sin( eta)
- - 0.000642 * cos( eta)
- - 0.000517 * cos(4. * th)) * sinS
- - (0.000347 * sin( eta)
- + 0.000853 * cos( eta)
- + 0.000517 * sin(4. * eta)) * cosS
- + 0.000403 * (cos(2. * th) * sin2S
- + sin(2. * th) * cos2S);
-
- r += -0.025948
- + 0.004985 * cosze
- - 0.001230 * cosS
- + 0.003354 * cos( eta)
- + (0.005795 * cosS
- - 0.001165 * sinS
- + 0.001388 * sin( eta) * cos2S)
- + (0.001351 * cosS
- + 0.005702 * sinS
- + 0.001388 * cos( eta) * sin2S)
- + 0.000904 * cos(2. * th)
- + 0.000894 * (cos( th) - cos(3. * th));
-
- /*******************************************************************************
- ** Tansformation of coordinates on Uranus and output. **
- *******************************************************************************/
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGURA,"PU","Uranus");
-
- /*******************************************************************************
- ** Now start Neptune. **
- *******************************************************************************/
- l = range(poly(84.457994,219.885914,0.0003205,-0.00000060,T0));
-
- a = 30.10957;
-
- e = poly(0.00899704, 0.000006330,-0.000000002,0.,T0);
- i = poly(1.77924200,-0.009543600,-0.000009100,0.,T0);
-
- w1 = range(poly(276.045975,0.3256394,0.00014095, 0.000004113,T0));
- w2 = range(poly(130.681389,1.0989350,0.00024987,-0.000004718,T0));
-
- M8 = poly(37.73063,218.46134,-0.000070,0.,T0);
-
- /*******************************************************************************
- ** Now perturbation corrections for neptune. **
- *******************************************************************************/
- ze = range((G - P) / RAD) * RAD;
- eta = range((G - Q) / RAD) * RAD;
- th = range((G - S) / RAD) * RAD;
-
- sinze = sin(ze); cosze = cos(ze);
-
- l1pert = (-0.589833 + 0.001089 * nu2) * sinH
- + (-0.056094 + 0.004658 * nu2) * cosH
- - 0.024286 * sin2H;
-
- w1pert = 0.024039 * sinH
- - 0.025303 * cosH
- + 0.006206 * sin2H
- - 0.005992 * cos2H;
-
- l += l1pert;
- w1 += w1pert;
-
- M0 = M8 + l1pert - (w1pert / e);
-
- e += 0.0004389 * sinH
- + 0.0004262 * cosH
- + 0.0001129 * sin2H
- + 0.0001089 * cos2H;
-
- a += -0.000817 * sinH
- + 0.008189 * cosH
- + 0.000781 * cos2H;
-
- ECC = kepler(e,M0);
- nu = truean(e,ECC);
- r = a * (1. - e * cos(ECC * RAD));
- u = l + nu - M0 - w2;
- ll = longi(w2,i,u);
- b = lati(u,i);
-
- ll += -0.009556 * sinze
- - 0.005178 * sin( eta)
- + 0.002572 * sin(2. * th)
- - 0.002972 * cos(2. * th) * sinG
- - 0.002833 * sin(2. * th) * cosG;
-
- b += 0.000336 * cos(2. * th) * sinG
- + 0.000364 * sin(2. * th) * cosG;
-
- r += -0.040596
- + 0.004992 * cosze
- + 0.002744 * cos( eta)
- + 0.002044 * cos( th)
- + 0.001051 * cos(2. * th);
-
- /*******************************************************************************
- ** Tansformation of coordinates on Neptune and output. **
- *******************************************************************************/
- #ifdef EUTSCH
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGNEP,"PN","Neptun");
- #else
- helio_trans(r,b,ll,Stheta,Sr,epli,MAGNEP,"PN","Neptune");
- #endif
-
- return(epli);
- }
-