fred@inuxe.UUCP (Fred Mendenhall) (01/02/86)
*** REPLACE THIS LINE WITH YOUR MESSAGE *** /* Planets * A program to determine the position of * the Sun., Mer., Ven., Mars, Jup, Sat & Ura * reference Jean Meesus's book, " Astronomical Formulae for * Calculators * program by * * F.T. Mendenhall * ihnp4!inuxe!fred * * Copyright 1985 by F.T. Mendenhall * all rights reserved * * (This copyright prevents you from selling the program - the * author grants anyone the right to copy and install the program * on any machine it will run on) */ #include <stdio.h> #include <math.h> double kepler(); double truean(); double longi(); double lati(); double poly(); double aint(); double range(); int cls(); int trans(); int speak(); double pie,rad; main() { int mm,dd,yy,time,tz,aa1,bb1; double jd,year,month,day,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; cls(); pie = 3.141592654; rad = pie/180.0; printf("DATE AND TIME FOR DESIRED PLANETARY POSITION?\n"); printf("What is the month (1-12)? "); scanf("%d",&mm); printf("\nWhat is the day (1-31)? "); scanf("%d",&dd); printf("\nWhat is the year (xxxx)? "); scanf("%d",&yy); printf("\n\nWhat is the time in the 24 hour clock?"); printf("\n (note 8:21 AM = 0821; 2:45 PM = 1445) \n\n"); printf(" RECALL 1pm = 1300 2pm = 1400 3pm = 1500 \n"); printf(" 4pm = 1600 5pm = 1700 6pm = 1800 \n"); printf(" 7pm = 1900 8pm = 2000 9pm = 2100 \n"); printf(" 10pm = 2200 11pm = 2300 12pm = 2400 \n"); printf("\n What is the time of interest?"); scanf("%d",&time); printf("\n\nWhat is the time zone correction, local to UT?"); printf("\nInput 0 for Universal time -\n"); printf("Input 5 for EST - \n"); printf("Input 6 for CST - \n"); printf("Input 7 for MST - \n"); printf("Input 8 for PST - \n"); printf("What is the time zone? "); scanf("%d",&tz); cls(); printf("For the date %d/%d/%d\n",mm,dd,yy); printf(" At %d ",time); if ( tz == 0) { printf("Universal Time"); } else if ( tz == 5) { printf("EST"); } else if ( tz == 6 ) { printf("CST"); } else if ( tz == 7 ) { printf("MST"); } else if ( tz == 8) { printf("PST"); } else { printf("LOCAL TIME"); } printf("\n the Julian date is "); /* */ /* Calculate the Julian date for the time of observation */ day = ((float)dd + ((float)time +(float)tz*100.0)/2400.0); if (mm > 2) { year = yy; month = mm; } else { year = yy - 1; month = mm + 12; } aa1 = (int) (year/100); bb1 = 2 - aa1 + (int)(aa1/4); jd = aint(365.25*year) + aint(30.6001*(month + 1)); jd = jd + day + 1720994.5; if (year < 0) { cls(); printf("Negative year not allowed- abort"); exit(1); } if((year + month/100) > 1582.10) { jd = jd + bb1; } printf("%f\n",jd); /* calculate time T0 from 1900 January 0.5 ET */ T0 = (jd - 2415020.0)/36525.0; /* 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*pie/180.0)); 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 +0.00256*cos(omeg*rad); printf("\nOBJECT R.A. DEC \t DISTANCE"); printf("\nSun "); 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); /* tansformation of coordinates on Mercury and ouput */ printf("\nMer "); trans(r,b,ll,Stheta,Sr,epli); /* 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; printf("\nVen "); trans(r,b,ll,Stheta,Sr,epli); /* 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) +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; printf("\nMars "); trans(r,b,ll,Stheta,Sr,epli); /* 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); printf("\nJup "); trans(r,b,ll,Stheta,Sr,epli); /* 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); printf("\nSat "); trans(r,b,ll,Stheta,Sr,epli); /* 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)); printf("\nUra "); trans(r,b,ll,Stheta,Sr,epli); /* 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); printf("\nNep "); trans(r,b,ll,Stheta,Sr,epli); putchar('\n'); exit(0); } /* end of program main */ int cls() { int i; for (i=0;i<30;i++) { putchar('\n'); } } double poly(a0,a1,a2,a3,t) double a0,a1,a2,a3,t; { return(a0+a1*t+a2*t*t+a3*t*t*t); } double aint(z) double z; { int trunk; trunk = (int)z; z = (double) trunk; return(z); } double kepler(e,M) double e,M; { double corr,e0,E0,E1; e0 = e /rad; corr = 1; E0=M; while (corr > 0.000001) { corr = (M + e0* sin(E0*rad) -E0)/(1-e*cos(E0*rad)); E1 = E0 + corr; if (corr < 0) { corr = -1.0* corr ; } E0 = E1; } return(E1); } double truean(e,E) double e,E; { double nu; nu = 2.0 * atan(sqrt((1+e)/(1-e))*tan(E*rad/2)); nu = nu/rad; if (nu < 0.0) { nu = nu + 360.0; } if (fabs(nu-E) > 90.0) { if (nu > 180.0) { nu = nu - 180.0; } else { nu = nu + 180.0; } } return(nu); } double longi(w2,i,u) double w2,i,u; { double x,y,l; y=cos(i*rad)*sin(u*rad); x=cos(u*rad); l = atan2(y,x); l = l/rad; if (l < 0.0) { l = l + 360.0; } return(l+ w2); } double lati(u,i) double u,i; { double b; b = asin(sin(u*rad)*sin(i*rad))/rad; return(b); } int speak(ra,dec,dis) double ra,dec,dis; { int h,m,s,deg; if ( ra < 0) { ra = ra + 360.0; } ra = ra /15.0; /* convert from degs to hours */ h = (int) aint(ra); m = (int)((ra-h)*60); s = (int) (((ra-h)*60-m)*60); printf(" %2dh %2dm %2ds ",h,m,s); deg = (int)aint(dec); m =(int)((dec - deg)*60); s = (int) (((dec - deg)*60 - m)*60); if ( m < 0) { m = m * -1; } if (s < 0) { s = s * -1; } printf(" %+3ddeg %2dm %2ds ",deg,m,s); printf("\t %.3f",dis); return(0); } double range(val) double val; { while (val < 0.0) { val = val + 360.0; } if (val > 360.0) { val = val - (aint(val/360.0)*360.0); } return(val); } int trans(r,b,ll,Stheta,Sr,epli) double r,b,ll,Stheta,Sr,epli; { double N,D,lambda,delta,beta,RA,DEC; N = r * cos(b*rad) * sin((ll - Stheta)*rad); D = r * cos(b*rad) * cos((ll - Stheta)*rad) + Sr; lambda = atan2(N,D)/rad; if (lambda < 0.0) { lambda = lambda + 360.0; } lambda = range(lambda+Stheta); delta = sqrt(N*N + D*D + (r*sin(b*rad))*(r*sin(b*rad))); beta = asin(r*sin(b*rad)/delta)/rad; N = sin(lambda*rad)*cos(epli*rad) - tan(beta*rad)*sin(epli*rad); D = cos(lambda*rad); RA = atan2(N,D)/rad; DEC = asin(sin(beta*rad)*cos(epli*rad) +cos(beta*rad)*sin(epli*rad)*sin(lambda*rad))/rad; speak(RA,DEC,delta); return(0); }