home *** CD-ROM | disk | FTP | other *** search
- Subject: v12i073: StarChart program and Yale star data, Part03/07
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rs@uunet.UU.NET
-
- Submitted-by: awpaeth@watcgl.waterloo.edu (Alan W. Paeth)
- Posting-number: Volume 12, Issue 73
- Archive-name: starchart/part03
-
- # This is a shell archive. Remove anything before this line,
- # then unpack it by saving it in a file and typing "sh file".
- #
- # Wrapped by watcgl!awpaeth on Mon Oct 5 19:01:46 EDT 1987
- # Contents: planet.c planet.1 yaleformat yale.omit
-
- echo x - planet.c
- sed 's/^@//' > "planet.c" <<'@//E*O*F planet.c//'
- /* 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)
- !
- ! Modified by Alan Paeth, awpaeth@watcgl, January 1987 for
- ! (1) non-interactive mode (uses current GMT)
- ! (2) output in simplified Yale format for use with star charter software
- ! (3) lines 365-380 rewritten as a simplier C expression (awpaeth, Apr '87)
- !
- ! Modified by Petri Launiainen, pl@intrin.FI, February 1987 for
- ! easier LOGFILE definition/modification in Makefile
- !
- ! Modified by Alan Paeth, September 1987, for command line flags.
- ! The program continues to provide reduced Yale output in the old style,
- ! but new versions of "starchart" accept either. The old format allows
- ! representation of magnitudes below -.99 (useful for planets), but no
- ! spectral or stellar identification, which is not useful for planets.
- !
- ! See "Time Notes" section below if you plan to rewrite the user interface.
- */
-
- #include <stdio.h>
- #include <math.h>
-
- #include <sys/time.h> /* for getting current GMT */
-
- #define CURYEAR 1987 /* default year -- needs to be maintained */
-
- #ifndef PLANETFILE
- #define PLANETFILE "./planet.star"
- #endif
-
- /* crude magnitudes of planets (x100) for output filtering by brightness */
-
- #define MAGSOL 0
- #define MAGMER 150
- #define MAGVEN 0
- #define MAGMAR 100
- #define MAGJUP 0
- #define MAGSAT 100
- #define MAGURA 590
- #define MAGNEP 800
-
- double pie, rad;
- double htod(), atof(), kepler(), truean();
- double longi(), lati(), poly(), aint(), range();
- int cls(), trans(), speak();
- FILE *logfile;
- char *progname;
-
- /*
- * Times Notes.
- *
- * This software would ideally use a generic UNIX system call to which would
- * provide day and date info as integers, plus current time west of GMT. These
- * values would become the default settings for each of the -m -d -y -t & -z.
- * Unfortunately, time on across many UNIX systems does not (to my knowledge)
- * exist as a uniform subroutine call.
- *
- * Instead, we presume that the very low level "gettimeofday" (GMT in seconds,
- * from 1 Jan 1970) exists on all UNIX installations, and use this subroutine
- * to use the present time of day when no command line parameters are present,
- * as defaults for the current time have not been filled in.
- *
- * When any flag-style command line parameters are present, hardcoded defaults
- * are substitude for -m, -d, -y -t switches, which may then be overridden.
- * The -z flag is filled in by a companion return value from "gettimeofday".
- * This approach makes for poor (on account of hard coding) defaults.
- *
- * A worthwhile change would be to simplify the command line control structure
- * and default mechanism by using a higher level system call, or (safer),
- * write the routine to convert Unix GMT into day, month, year, so that it
- * lives within this program. This would allow for more reasonable defaults,
- * and still merely one UNIX system call to get GMT time. Perhaps sources
- * from a UNIX system may be studied to do this correctly.
- *
- * Expertise in "time" on a specific UNIX system is *NOT* what is required --
- * what *IS* required is knowledge and access to enough independent UNIX
- * systems to insure (to a high probability) that the code remains portable.
- * In other words, only low-level system calls known to work across a large
- * range of systems should be employed.
- *
- */
-
- double currenttime()
- {
- #define GMT1970 2440587.5
- #define SECSPERDAY (60.0*60.0*24.0)
- struct timeval tv;
- struct timezone tz;
- gettimeofday(&tv, &tz);
- return(GMT1970 + tv.tv_sec/SECSPERDAY);
- }
-
- double commandtime(argc, argv)
- char **argv;
- {
- struct timeval tv;
- struct timezone tz;
- int mm,dd,yy,aa1,bb1;
- double jd,year,month,day,time,timez;
- int j;
- static char *usage =
- "\nusage:\tplanet {current time used}\nor\tplanet juliandate\nor\tplanet [-t hh.mm -z zone -y year -m mon -d day ]";
- /*
- * check command line style
- */
- if (argc == 1) return (currenttime());
- /*
- * no args - use current time
- */
- if ((argv[1][0] != '-'))
- {
- /*
- * one numeric arg - use it as the julian date
- */
- if (argc == 2) return(atof(argv[1]));
- die("no switches - %s", usage);
- }
- else
- {
- /*
- * flags present, set up defaults
- */
- gettimeofday(&tv, &tz);
- time = 0.0; /* local time (0.0-23.999) */
- yy = CURYEAR; /* local year */
- mm = 0; /* local month */
- dd = 0; /* local day of month */
- timez = tz.tz_minuteswest/60.0; /* local time hrs west of Greenwich */
- /*
- * override defaults
- */
- for (j=1; j<argc; j++)
- {
- if (argv[j][0] != '-')
- die("unknown argument - %s", usage /*argv[j]*/ );
- switch (argv[j][1])
- {
- case 't': time = htod(argv[++j]); break;
- case 'z': timez = htod(argv[++j]); break;
- case 'y': yy = atoi(argv[++j]); break;
- case 'm': mm = atoi(argv[++j]); break;
- case 'd': dd = atoi(argv[++j]); break;
- default: die("unknown switch - %s", usage /* argv[j] */ );
- }
- if (j == argc) die("trailing command line flag - %s", argv[j-1]);
- }
- }
- if (!mm || !dd) die("both month and day flags must be present");
- day = ((float)dd + (time + timez)/24.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 + month/100) > 1582.10) jd = jd + bb1;
- return(jd);
- }
-
- main(argc, argv)
- int argc;
- char **argv;
- {
- 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;
-
- #define WRITEMODE "w"
- #define OPENFAIL 0
- progname = argv[0];
- if ((logfile = fopen(PLANETFILE, WRITEMODE)) == OPENFAIL)
- die(stderr, "fail on opening log file %s\n", PLANETFILE);
- cls();
- pie = 3.1415926535898;
- rad = pie/180.0;
-
- /* calculate time T0 from 1900 January 0.5 ET */
- jd = commandtime(argc, argv);
- printf("Julian date: %f\n", jd);
- 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\n");
- 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 */
- 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;
- 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;
- 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);
-
- 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);
-
- 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));
- 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);
- trans(r,b,ll,Stheta,Sr,epli, MAGNEP, "PN", "Neptune");
-
- putchar('\n');
- close(logfile);
- exit(0);
- } /* end of program main */
-
-
- int cls()
- {
- #define CLEARCNT 1
- int i;
- for (i=0; i < CLEARCNT; 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, mag, sym, str)
- double ra,dec,dis;
- char *sym, *str;
- {
- 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("%s\t%2dh %2dm %2ds ",str, h,m,s);
- fprintf(logfile, "%02d%02d%02d", 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\n",dis);
- fprintf(logfile, "%+03d%02d+%03d%s%s\n", deg, m, mag, sym, str);
- 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, mag, sym, str)
- double r,b,ll,Stheta,Sr,epli;
- char *sym, *str;
- {
- 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, mag, sym, str);
- return(0);
- }
-
- double htod(s)
- char *s;
- {
- /*
- * htod(str) reads floating point strings of the form {+-}hh.{mm} thus allowing
- * for fractional values in base 60 (ie, degrees/minutes).
- */
- double x, sign;
- int full, frac;
- char *t;
- t = s-1;
- while(*++t)
- {
- if ( ( (*t<'0') || (*t>'9') ) && (*t!='.') && (*t!='+') && (*t!='-'))
- die("non-digit in dd.mm style numeric argument");
- }
- if (s == NULL) return 0.0;
- full = frac = 0;
- sign = 1.0;
- if (*s == '-')
- {
- sign = -1.0;
- s++;
- }
- else if (*s == '+') s++;
- while (*s && *s != '.') full = 10 * full + *s++ - '0';
- if (*s++ == '.')
- {
- if (*s) frac = 10 * (*s++ - '0');
- if (*s) frac += *s++ - '0';
- if (frac > 59) frac = 59;
- }
- x = (double) full + ((double) frac) / 60.0;
- return sign * x;
- }
-
- die(a,b)
- char *a, *b;
- {
- fprintf(stderr,"%s: ", progname);
- fprintf(stderr,a,b);
- fprintf(stderr,"\n");
- exit(1);
- }
- @//E*O*F planet.c//
- chmod u=rwx,g=rwx,o=rwx planet.c
-
- echo x - planet.1
- sed 's/^@//' > "planet.1" <<'@//E*O*F planet.1//'
- @.TH starchart LOCAL 6/2/87
- @.ad b
- @.SH NAME
- planet, moonphase, epoch
- @.br
- \- print phase of the Moon and planetary information, precess data in .star file format.
- @.SH SYNOPSIS
- \fBplanet [juliandate]\fR
- @.br
- or
- @.br
- \fBplanet [-z timezone -m month -d day -y year -t hh.mm ]\fR
- @.br
- \fBmoonphase\fR
- @.br
- \fBepoch [ inputepoch ] [ outputepoch ]\fR
- @.SH DESCRIPTION
- These programs generate and maintain star chart data in the format used by
- the \fBstarchart\fR software tools.
- @.PP
- Planetary information is generated by the program \fBplanet\fR, which calculates
- locations a given Julian date, or for the current time (given no arguments).
- In common use, an alternate syntax is provided to simplify the calculation of
- the Julian date, in which integers for month, day, (mandatory), and year are
- given. Time is specified in the form \fBhh.mm\fP or \fBhh\fP on a 24-hour clock
- and defaults to 0.00 (midnight). The \fB-z\fP flag (same format as -t) gives
- the number of hours the observer is west of GMT (see below).
- @.PP
- A summary is then printed on the standard output giving the right ascension,
- declination and distance (in AU's) for the Sun and all planets except Pluto.
- This data is additionally placed in the file \fBplanet.star\fR for subsequent
- use by charting software.
- @.PP
- The program \fBmoonphase\fP gives the current lunar phase. At present it does
- not provide coordinate data for subsequent plotting.
- @.PP
- The program \fBepoch\fP converts right-ascension and declination data within
- \fByale.star\fR style datasets from epoch 1975.0 into the epoch 2000.0.
- Either the first or both epoch dates may be overridden with command line
- parameters (floating point values). The data is read and written from
- the standard input and output. Because only the coordinate data is updated
- within each line item, the program may be used on either versions of the
- reduced Yale data.
- @.SH BUGS
- Daylight savings time may have to be reckoned for in \fBplanet\fP, as the
- default \fB-z\fP value during periods of daylight time may or may not be
- adjusted relative to GMT. The required code changes would make \fBplanet\fP
- installation dependent.
- @.SH AUTHORS
- \fBplanet\fP - F.T. Mendenhall (ihnp4!inuxe!fred)
- @.br
- \fBmoonphase\fP - Keith E. Brandt
- @.br
- \fBepoch\fP - Alan Paeth, University of Waterloo (AWPaeth@watCGL)
- @.br
- \fByale.star\fP - Robert Tidd (inp@VIOLET.BERKELEY.EDU)
- @.br
- \fBmessier.star\fP - Bob Tidd and Alan Paeth
- @.SH SOURCES
- \fBplanet\fP - \fIAstronomical Formulae for Calculators\fP by Jean Meesus
- @.br
- \fBmoonphase\fP - \fIPractical Astronomy with Your Calculator\fP by Duffett-Smith.
- @.br
- \fBepoch\fP - \fICelestial BASIC\fP by Eric Burgess (SYBEX 1982)
- @//E*O*F planet.1//
- chmod u=rwx,g=rwx,o=rwx planet.1
-
- echo x - yaleformat
- sed 's/^@//' > "yaleformat" <<'@//E*O*F yaleformat//'
- Overview
-
- The Yale Bright Star Catalog is an electronic catalog providing extensive
- stellar information for the brightest stars. It is large (megabytes), and
- includes extensive detail for each star (e.g. B-V color temperature, proper
- motion, catalogue names), much of which is not needed by charting software.
- It is normally distributed on magnetic tape, and has not (to my knowledge)
- been posted to the net.
-
- The highly reduced and hand-revised versions included with the "starchart"
- software family have appeared in two forms. The first (~160K, posted February,
- 1987) included merely location, magnitude and familiar names for a small number
- of stars. This recent reduction (~190K, posted October (?), 1987) adds spectral
- designation for potential color applications, double and variable star
- flags, Bayer and Flamsteed indices and increases the number of named stars.
-
- The current dataset was reduced directly from the original Yale data by
- Robert Tidd, using custom software. His file format is given below [1]. The
- raw output was hand-edited by Alan Paeth to remove a number of anomolies [2].
- Users wishing to update or extend yale.star should look in part [3].
-
- Disclaimer
-
- The original Yale Bright Star Catalog may not be used for commercial purposes
- without express previous written consent from the Department of Astronomy,
- Yale University.
-
- --
- Part [1]
-
- File format for yale.star (reduced Yale star catalog, version 2)
-
- Name Col Len Type Desc
- -------------------------------------------------
- ra 1 6 i6 ra 2000 hhmmss
- dec 7 5 +-i4 dec 2000 -mmss
- mag 12 3 {-}i magnitude*100 -dd or -ddd
- type 15 2 c2 object type
- type1 15 1 c1 object type 1 / star,ga,cl,neb,etc
- type2 16 1 c1 object type 2 / dbl,open,cl,etc
- spec2 17 2 c1d1 spectral 2 'G2'
- letter 19 2 c2 greek Bayer letter(s), or Flamsteed number
- const 21 3 c3 constellation (I.A.U. designation)
- name 24 30 c* name,descrip.
- newline 54 1 c1 newline (max final loc)
- $
- --------
- 'type1'/'type' 2 coding table
- CG-Glob.Cluster CO-Open Cluster GC-Galac.Cluster
- GP-Sphere Galaxy GS-Spiral Galaxy
- ND-Difuse Nebula NP-Planetary Nebula
- P*-Planet
- SS-star SB-Binary Star SD-Double Star
- SV-Variable Star
- VM-vector move VS-vector draw (solid) VD-vector draw (dotted)
- VH-vector draw (hyphens = dashed)
- I*-Invisible (for annotation)
- --------
- 'letter' coding table
-
- # Flamsteed
- a-alpha b-beta g-gamma d-delta e-epsilon z-zeta h-eta @-theta i-iota k-kappa
- l-lambda m-mu n-nu E-xi o-omicron p-pi r-rho s-sigma t-tau u-upsilon 0-phi
- x-chi %-psi w-omega $-????
- --------
-
- Example:
-
- ---yale.star---
- 141540+1911-11SSK2a BOOArcturus
- 062357-5241-72SSF0a CAR
- 051641+4600006SDG8a AURCapella
- @.
- @.
- @.
- ---messier.star---
- 053430+2202840ND TAUm1 Crab Nebula
- 175629-1901600CO SGRm23
- 202355+3832710CO CYGm29 ,good at low pwr
- 084026+1959370CO CNCm44 Praesepe, Beehive Cl
- @.
- @.
- @.
-
- [2] Hand edits done on "raw" reduced yale.star
-
- [a] Proper names added:
-
- 062357-5241-72SSF0a CARCanopus
- 050229+4105000SSK5z AURCapella
- 195047+0852075SDA7a AQLAltair
- 173336-3706162SSB1l SCOShaula
- 125602+3819288SDB9a2CVNCor Caroli
-
- [b] Magnitude and Spectral data changes (based on "Norton"):
-
- 122636-6306158SDB1a1CRU
- 122636-6306080SDB2a1CRUAcrux
-
- [c] Deleted (0.00 magnitude - obviously wrong. The position is in the extreme
- S.W. of Vela, near non-descript NGC 2547)
-
- 081334-5012000SSK6
-
- [d] Name Changed
-
- 052617+2836165SSB7b TAUHath (old)
- 052617+2836165SSB7b TAUAlnath (new)
-
- Note: beta Taurii == lambda Aurigae (above)
-
- [e] Mag limit:
- _
- 064509-1643146SDA1a CMASirius (-1.46 not representable)
- 064509-1643-99SDA1a CMASirius
-
- Sirus has been reduced from mag -1.46 to -.99, owing to limitations in
- the three character positions used to give magnitude. This may be rectified
- by using the old style format (style is checked on a line and not a file basis),
- but this would remove spectral information and identification.
-
- [f] Known Problems and "Features"
-
- For certain double stars (when the companion is rather bright), duplicate
- entries exist in the dataset, Ra and Dec values matching exactly. The
- plotting of the second visible double star in an exact overstrike position
- can cause problems, particularly with PostScript, which will inadvertently
- form an annulus symbols which resembles the variable star indicator.
-
- The fix is to remove all duplicate entries from yale.star which are exact
- matches in RA and DECL, omitting those stars of lower value, while insuring
- that the parent star has a "SD" (star double) indicator.
-
- This has been done to roughly seventy stars in the database, notibly to
- Orion's belt and his Trapezium, and to Alpha Centaurii. The omitted entries
- are included in "yale.omit". These remain useful for checking the combined
- magnitudes of bright double stars, or in searching for pairs with striking
- difference in star spectral class. The best known example of the latter in the
- Northern Hemisphere is beta Cygnii [Alberio], but as the locations of both
- companions differ by 2" in RA, the parent star of spectral class K5 is
- represented, together with its B8 compainion.
-
- [g] Bayer and Flamsteed numbers
-
- A two character field represents Bayer letters, which by convention are
- assigned as Greek lower case letters from alpha to omega, followed by
- assignments in single and double digit Roman type. The database contains
- entries such as " A" and "A " and "a ", and it is not always clear that the
- lower case letter in the first column is an exact "trigger" for Greek fonts.
- (Because entries such as "@" indicate a theta, and "E" also occurs).
- In practice, this is not a problem unless one desires an authoratative code
- for a quite dim star (ie, beyond the 24th Bayer assignment). For virtally all
- stars given labels in standard Atlases, the StarChart output provides an exact
- match.
-
-
- [3] User Extentions to yale.star
-
- Barring the correction of obvious errors in yale.star, users may wish to
- add additional stars or ephemeride data in .star format. In any case, data
- should be for the epoch E2000.0. The program "epoch" may be used if this is
- not the case. The data records may be in either the new or old reduced
- file format convention (planet.star still produces data in the old format).
- The old format omits provision for spectral class or secondary label
- information, but allow stars of magnitude at or below 10.0, as four (and not
- three) characters are allocated to magnitude. Because testing of format is
- done on a line-by-line basis, entries may be mixed and matched. Thus, the
- present yale.star could be extended with data for dim, nameless stars below
- magnitude 10. Note that yale.star must be sorted in order of decreasing
- magnitude. This is only important for stellar data records.
-
- For other cases, data produced in .star format may be included for printing
- under the "-f file.star" option in the starcharting software. The important
- fields are for Ra, Decl, Magnitude, Type (code and subcode) and name, as each
- directly controls the location and appearence of the output. Two addition
- record types have been added to facilitate general plotting (such as lunar
- limb profiles or the ecliptic). The "I" type is an invisible object of some
- specified magnitude and location which serves as a means to annotate output.
- The "V" type is a vector object with subcodes "M", "S", "D", and "H" for move,
- solid-draw, dot-draw and hyphen(dash)-draw. Annotations are ignored for vector
- records, because the task of disentangling the intermingling of text and vector
- commands to a large class of output devices is formidable. Again, magnitude
- comes into play in performing clipping of objects too dim for display. A sample
- file of these record types appears in "ephem.star"
- @//E*O*F yaleformat//
- chmod u=rwx,g=rwx,o=rwx yaleformat
-
- echo x - yale.omit
- sed 's/^@//' > "yale.omit" <<'@//E*O*F yale.omit//'
- /* double star duplicates (in ra and decl, <mag omitted) */
-
- 003133-6258453SDA2b2TUC
- 004953+2743629SDF265PSC
- 013947-5612600SDK0P ERI
- 015331+1917483SDA g1ARI
- 020202+0246523SDA a PSCKaitain
- 025913+2120555SDA2e ARI
- 030052+5221674SDB9
- 034835-3738542SDA0
- 035417-0257633SDA132ERI
- 044335-0848682SDF255ERI
- 053201-0018686SDB2d ORIMintaka
- 053508+0956556SDB0l ORI
- 053845-0236662SDB3
- 054046-0157421SDB3z ORI
- 061137+4843682SDA041AUR
- 062346+0436672SDF5 8MON
- 064813+5542633SDF6
- 072022-5219660SDF2
- 072852-3151724SDB3
- 073419-2328601SDF6
- 073436+3153285SDA1a GEMCastor
- 073522-7417726SDB9
- 074529-1442680SDA0 2PUP
- 082618-3904728SDA0
- 082640+2432764SDF624CNC
- 082647+2656632SDA402CNC
- 083551+0637715SDG5
- 085530-0758691SDA317HYA
- 093046-3153721SDA0z1ANT
- 094706-6504603SDF0u CAR
- 101959+1951190SDG7g2LEO
- 105537+2445630SDA154LEO
- 111811+3132487SDG0E UMA
- 113216-2916586SDF7
- 124140-0127500SDF0g VIR
- 132356+5456395SDA z UMAMizar
- 143936-6050170SDK1a CENRigil Kentaurus
- 144044+1625581SDA p2BOO
- 144109+1343483SDA2z BOO
- 144459+2705512SDA2e BOOPulcherrima
- 150507-4703482SDB5p LUP
- 152312+3017608SDG2h CRB
- 153449+1032516SDF0d SER
- 153840-0848650SDF7
- 153923+3639600SDB6z1CRB
- 154754-6527652SDA5
- 155654-3358573SDA0E2LUP
- 160422-1123477SDF5E SCO
- 160805+1703652SDK2k HERMarsik
- 160834-3906671SDA0
- 161441+3352666SDG1s CRB
- 162440-2942594SDG0
- 162535-2327522SDB3r OPH
- 163614+5256553SDB917DRA
- 170520+5428583SDF6m DRA
- 171521-2636533SDK136OPH
- 171801-2418680SDF6o OPH
- 172341+3708547SDB9r HER
- 175905-3016700SDG8
- 180305-0811604SDF2t OPH
- 180750+2606590SDA3 HER
- 183323-3844655SDB8k1CRA
- 184421+3940602SDA4e1LYR
- 184423+3936537SDA5e2LYR
- 190625-3703501SDF8g CRA
- 191205+4951675SDG4
- 210404-0549731SDA312AQR
- 214408+2844608SDF3m2CYG
- 222850-0001442SDF2z2AQR
-
- /* triple star duplicates */
-
- 081213+1739620SDG2z2CNC
- 081213+1739626SDG0z1CNC
-
- 062849-0702522SDB3b MON
- 062849-0702540SDB3b
-
- /* quadruple star duplicates (the Trapezium) */
-
- 053517-0523670SDB0@1ORI
- 053517-0523673SDB0@1ORI
- 053517-0523810SDB3@1ORI
-
- /* exact duplicates (match in mag and stellar class) -- possible glitches? */
-
- 030527+2515611SDB752ARI
- 054046-0157421SDB3
- 130959+1731522SDF5a COM
- 180650-4326577SDA5
- 205139-6226659SDA2
- 235930+3343658SDG0
- @//E*O*F yale.omit//
- chmod u=rw,g=r,o=r yale.omit
-
- exit 0
-
-