home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / basic / math.ark / STARFIX.BAS < prev    next >
Encoding:
BASIC Source File  |  1986-12-21  |  6.8 KB  |  222 lines

  1.    10 PRINT "***PROGRAM STARFIX***"
  2.    11 VAR P,R1,F1,J,J1,A,R,D1,L1,L2,D,T,J0,T1,C1,T5,T2,S0=REAL.DOUBLE
  3.    12 VAR S1,A4,M1,H,C2,S2=REAL.DOUBLE
  4.    13 VAR F9,Y,M,D2,S,A1,A2,A3=REAL
  5.    14 VAR E$,A$,S$,N$=STRING
  6.    15 LPRINTER
  7.    20 LET F9=1
  8.    30 PRINT "OBJECT NAME: ";
  9.    40 REM THIS IS PROGRAM STARFIX
  10.    50 REM THIS VERSION RUNS ON NEVADA BASIC 12 BY ELLIS COMPUTING
  11.    60 REM THIS IS THE 12 DIGIT PRECISSION VERSION IN THE PACKAGE
  12.    70 REM IT WILL CALCULATE THE ALTITUDE AND AZMUTH OF ANY CELESTIAL BODY
  13.    80 REM GIVEN THE LATITUDE AND LONGITUDE OF THE OBSERVER,
  14.    90 REM THE RIGHT ASCENTION AND DECLINATION OF THE CELESTIAL BODY
  15.   100 REM AND THE SIDEARIAL TIME AT GREENWICH DETERMINED BY
  16.   110 REM THE IAU FORMULA FOR GST FROM UNIVERSAL TIME
  17.   120 REM THIS PROGRAM LOOPS BACK TO GET ANOTHER TIME FOR THE OBSERVATION
  18.   130 REM TO GET OUT OF LOOP ENTER <CONT>-C.
  19.   140 REM THIS VERSION BY M. P. FINERTY, MAY 31, 1984
  20.   150 REM ALTITUDE AND AZMUTH FROM RA AND DEC + LST
  21.   160 LET P=3.141592654
  22.   170 LET R1=P/180
  23.   175 CONSOLE
  24.   180 PRINT "INPUT OBJECT NAME"
  25.   185 LPRINTER
  26.   190 INPUT N$
  27.   200 PRINT N$
  28.   205 CONSOLE
  29.   210 PRINT "INPUT RIGHT ASCENTION"
  30.   220 INPUT "H= ",A1
  31.   230 INPUT "M= ",A2
  32.   240 INPUT "S= ",A3
  33.   250 PRINT "RA = ";A1;" HRS ";A2;" MINS ";A3;" SECS"
  34.   260 PRINT "IS THIS CORRECT? Y?/N?"
  35.   270 INPUT A$
  36.   280 IF A$="N" THEN 210
  37.   290 IF A$<>"Y" THEN 210
  38.   300 GOSUB 1340
  39.   310 LET R=A*15*R1
  40.   315 LPRINTER
  41.   320 PRINT "RIGHT ASCENTION IN DECIMAL DEGREES IS: ";R/R1
  42.   325 CONSOLE
  43.   330 PRINT "INPUT DECLINATION"
  44.   340 INPUT "DEGREES ",A1
  45.   350 INPUT "MINUTES ",A2
  46.   360 INPUT "SECONDS ",A3
  47.   370 PRINT "IS THIS NORTH OR SOUTH, N?/S?"
  48.   380 INPUT S$
  49.   390 PRINT "DECLINATION = ";A1;" DEG ";A2;" MIN ";A3;" SEC ";S$
  50.   400 PRINT "IS THIS CORRECT? Y?/N?"
  51.   410 INPUT A$
  52.   420 IF A$="N" THEN 330
  53.   430 IF A$<>"Y" THEN 330
  54.   440 GOSUB 1340
  55.   450 LET D1=A*R1
  56.   460 IF F9=2 THEN  RETURN 
  57.   465 LPRINTER
  58.   470 PRINT "DECLINATION IN DECIMAL DEGREES IS: ";D1/R1
  59.   474 CONSOLE
  60.   480 PRINT "INPUT LATITUDE"
  61.   490 INPUT "DEGREES ",A1
  62.   500 INPUT "MINUTES ",A2
  63.   510 INPUT "SECONDS ",A3
  64.   520 PRINT "IS LATITUDE NORTH OR SOUTH? N?/S?"
  65.   530 INPUT S$
  66.   540 PRINT "LATITUDE IS: ";A1;" DEGREES ";A2;" MINUTES ";A3;" SECONDS ";S$
  67.   550 PRINT "IS THIS CORRECT? Y?/N?"
  68.   560 INPUT A$
  69.   570 IF A$="N" THEN 480
  70.   580 IF A$<>"Y" THEN 480
  71.   590 GOSUB 1340
  72.   600 LET L1=A*R1
  73.   605 LPRINTER
  74.   610 PRINT "OBSERVERS POSITION"
  75.   620 PRINT "LATITUDE IN DECIMAL DEGREES IS: ";L1/R1
  76.   625 CONSOLE
  77.   630 PRINT "INPUT LONGITUDE"
  78.   640 INPUT "DEGREES ",A1
  79.   650 INPUT "MINUTES ",A2
  80.   660 INPUT "SECONDS ",A3
  81.   670 PRINT "IS LONGITUDE EAST OR WEST? E?/W?"
  82.   680 INPUT E$
  83.   690 IF E$="E" THEN  LET S$="N" ELSE  LET S$="S"
  84.   700 PRINT "LONGITUDE IS: ";A1;" DEGREES ";A2;" MINUTES ";A3;" SECONDS ";E$
  85.   710 PRINT "IS THIS CORRECT? Y?/N?"
  86.   720 INPUT A$
  87.   730 IF A$="N" THEN 630
  88.   740 IF A$<>"Y" THEN 630
  89.   750 GOSUB 1340
  90.   760 LET L2=A*R1
  91.   765 LPRINTER
  92.   770 PRINT "LONGITUDE IN DECIMAL DEGREES IS: ";L2/R1
  93.   780 GOSUB 1370
  94.   790 GOSUB 1470
  95.   800 GOSUB 1740
  96.   810 LET A1=H
  97.   820 LET A2=M
  98.   830 LET A3=S
  99.   840 LET S$="N"
  100.   850 GOSUB 1340
  101.   860 LET T=A*15*R1
  102.   870 REM T5 IS LHA
  103.   880 LET T5=T-R+L2
  104.   890 IF T5<0 THEN  LET T5=T5+2*P
  105.   900 IF T5>2*P THEN  LET T5=T5-2*P
  106.   910 PRINT "LOCAL HOUR ANGLE: ";T5/R1;" DEGREES"
  107.   920 LPRINTER 
  108.   930 PRINT "LOCAL HOUR ANGLE: ";T5/R1;" DEGREES"
  109.   940 REM CALCULATE AZMUTH (A) AND ALTITUDE(H)
  110.   950 LET S1=SIN(L1)*SIN(D1)
  111.   960 LET S1=S1+COS(L1)*COS(D1)*COS(T5)
  112.   970 LET C1=1-S1*S1
  113.   980 IF C1>0 THEN  LET C1=SQR(C1)
  114.   990 IF C1<=0 THEN 1020
  115.  1000 LET H=ATN(S1/C1)
  116.  1010 GOTO 1030
  117.  1020 LET H=SGN(S1)*P/2
  118.  1030 LET C2=COS(L1)*SIN(D1)
  119.  1040 LET C2=C2-SIN(L1)*COS(D1)*COS(T5)
  120.  1050 LET S2=-(COS(D1)*SIN(T5))
  121.  1060 IF C2=0 THEN  LET A=SGN(S2)*P/2
  122.  1070 IF C2=0 THEN 1120
  123.  1080 LET A=ATN(S2/C2)
  124.  1090 IF S2<0 AND C2>0 THEN  LET A=2*P-ABS(A)
  125.  1100 IF S2<0 AND C2<0 THEN  LET A=P+ABS(A)
  126.  1110 IF S2>0 AND C2<0 THEN  LET A=P-ABS(A)
  127.  1120 IF A<0 THEN  LET A=A+2*P
  128.  1130 IF A>2*P THEN  LET A=A-2*P
  129.  1135 CONSOLE
  130.  1140 PRINT "ALTITUDE: ";H/R1
  131.  1150 IF H<=0 THEN  PRINT "DOWN" ELSE  PRINT "UP"
  132.  1160 PRINT "AZMUTH: ";A/R1
  133.  1170 PRINT "--ooOOOoo--"
  134.  1180 PRINT 
  135.  1190 PRINT 
  136.  1195 LPRINTER
  137.  1200 PRINT 
  138.  1210 PRINT "ALTITUDE IN DEGREES: ";H/R1;" AZMUTH IN DEGREES: ";A/R1
  139.  1220 PRINT "--ooOOOoo--"
  140.  1230 PRINT 
  141.  1240 PRINT 
  142.  1245 CONSOLE
  143.  1250 PRINT "DO YOU WANT ANOTHER TIME AND DAY? Y?/N?"
  144.  1260 INPUT A$
  145.  1270 IF A$="Y" THEN 780
  146.  1280 PRINT "DO YOU WANT ANOTHER OBJECT?"
  147.  1290 INPUT A$
  148.  1300 LET F9=2
  149.  1310 IF A$="Y" THEN  GOSUB 30 ELSE  END 
  150.  1320 GOTO 870
  151.  1330 REM HERE BEGIN THE SUBROUTINES
  152.  1340 IF S$<>"S" THEN  LET S=1 ELSE  LET S=-1
  153.  1350 LET A=S*(A1+A2/60+A3/3600)
  154.  1360 RETURN 
  155.  1370 REM CALCULATE GST
  156.  1375 CONSOLE
  157.  1380 PRINT "INPUT YEAR, MONTH, DAY, GREGORIAN CALENDAR"
  158.  1390 INPUT "YEAR ",Y
  159.  1400 INPUT "MONTH ",M
  160.  1410 INPUT "DAY ",D2
  161.  1420 PRINT Y;" YEAR ";M;" MONTH ";D2;" DAY "
  162.  1430 PRINT "IS THIS CORRECT? Y?/N?"
  163.  1440 INPUT A$
  164.  1450 IF A$="N" THEN 1380
  165.  1460 RETURN 
  166.  1470 IF A$<>"Y" THEN 1380
  167.  1475 LPRINTER
  168.  1480 PRINT "DATE OF OBSERVATION OR PROJECTION"
  169.  1490 PRINT D2;" DAY ";M;" MONTH,";Y
  170.  1500 REM CALCULATE FRACTION OF A DAY
  171.  1505 CONSOLE
  172.  1510 PRINT "INPUT HOURS MINUTES AND SECONDS, GREGORIAN CALANDAR"
  173.  1520 INPUT "HOURS ",A1
  174.  1530 INPUT "MINUTES ",A2
  175.  1540 INPUT "SECONDS ",A3
  176.  1550 PRINT A1;" HOURS ";A2;" MINUTES AND ";A3;" SECONDS"
  177.  1560 PRINT "IS THIS CORRECT? Y?/N?"
  178.  1570 INPUT A$
  179.  1580 IF A$="N" THEN 1510
  180.  1590 IF A$<>"Y" THEN 1510
  181.  1595 LPRINTER
  182.  1600 PRINT "TIME OF OBSERVATION OR PROJECTION"
  183.  1610 PRINT A1;":";A2;":";A3
  184.  1620 LET F1=(A3+60*A2+3600*A1)/86400-0.5
  185.  1630 LET J=-INT(7*(INT((M+9)/12)+Y)/4)
  186.  1640 LET S=SGN(M-9)
  187.  1650 LET A4=ABS(M-9)
  188.  1660 LET J1=INT(Y+S*INT(A4/7))
  189.  1670 LET J1=-INT((INT(J1/100)+1)*3/4)
  190.  1680 LET J=J+INT(275*M/9)+D2+J1
  191.  1690 LET J=J+1721028+367*Y
  192.  1695 CONSOLE
  193.  1700 PRINT "JULIAN DAY ";J;" FRACTION OF A DAY ";F1
  194.  1705 LPRINTER
  195.  1710 PRINT 
  196.  1720 PRINT "JULIAN DAY NUMBER: ";J;"  FRACTION OF DAY: ";F1
  197.  1730 RETURN 
  198.  1740 REM CDOMPUTE GREENWICH MEAN SIDERIAL TIME
  199.  1750 LET D=J-2451545
  200.  1760 LET T=D/36525
  201.  1770 LET T1=INT(T)
  202.  1780 LET J0=T1*36525+2451545
  203.  1790 LET T2=(J-J0+0.5)/36525
  204.  1800 LET S0=24110.54841+184.812866*T1
  205.  1810 LET S0=S0+8640184.81286*T2
  206.  1820 LET S0=S0+(0.093104*T*T)
  207.  1830 LET S0=S0-(0.0000062*T*T*T)
  208.  1840 LET S0=S0/86400
  209.  1850 LET S1=INT(S0)
  210.  1860 LET S0=S0-S1
  211.  1870 LET S0=24*(S0+(F1+0.5)*1.002737909)
  212.  1880 IF S0<0 THEN  LET S0=S0+24
  213.  1890 IF S0>24 THEN  LET S0=S0-24
  214.  1900 LET H=INT(S0)
  215.  1910 LET M1=60*(S0-H)
  216.  1920 LET M=INT(M1)
  217.  1930 LET S=60*(M1-M)
  218.  1935 CONSOLE
  219.  1940 PRINT "GMST: ";H;" HOURS ";M;" MINUTES AND ";S;" SECONDS"
  220.  1950 RETURN 
  221. SGN(M-9)
  222.  1650 LET A4=ABS(M-9)