home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug041.ark / MOONLOC3.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  7KB  |  220 lines

  1. 100! THIS PROGRAM IS DESIGNED TO CALCULATE THE AZIMUTH AND
  2. 110! ELEVATION OF THE MOON.
  3. 120!
  4. 130! THE REQUIRED INPUT IS THE GMT MONTH, DAY, AND YEAR FOR
  5. 140! WHICH THE MOON'S AZIMUTH AND ELEVATION ARE DESIRED.  IN
  6. 150! ADDITION, IF PRINTOUT IS DESIRED NOT ONLY WHEN THE MOON
  7. 160! IS NEAR THE HORIZON, THE TIME INTERVAL OVER WHICH THE
  8. 170! POSITION IS DESIRED MUST BE ENTERED.
  9. 180!
  10. 190! THE COMPLETE INPUT FORMAT FOR THE ABOVE IS:
  11. 200!
  12. 210!  MM,DD,YYYY,TTTT,TTTT
  13. 220!
  14. 230! IF YOU ELECT TO HAVE PRINTOUT OCCUR ONLY WHEN THE MOON IS
  15. 240! NEAR THE HORIZON, YOU WILL BE ASKED TO INPUT THE MAXIMUM
  16. 250! ELEVATION FOR WHICH YOU WANT THE PRINTOUT.  IN THIS CASE,
  17. 260! YOU WILL NOT BE ASKED TO SUPPLY TIMES FOR THE TIME INTERVALS.
  18. 270!
  19. 280! PRINTOUT IS SUSPENDED WHENEVER THE ELEVATION OF THE MOON
  20. 290! IS NEGATIVE.
  21. 300!
  22. 310! YOU CAN ASK FOR DATA FOR UP TO 25 DAYS AT ONCE: SIMPLY TYPE
  23. 320! IN THE INFORMATION FOR ONE DAY (AS IN THE REQUIRED FORMAT
  24. 330! FOR YOUR PARTICULAR NEEDS) EACH TIME THE COMPUTER PRINTS A
  25. 340! "?".  WHEN YOU HAVE ENTERED ALL THE DATA YOU WISH, FOLLOW
  26. 350! THE LAST "?" BY AN INPUT OF ZEROES SEPERATED BY COMMAS --
  27. 360! JUST AS IN THE FORMAT YOU WERE USING TO ENTER THE DATA.
  28. 370!
  29. 380! ALL DATES AND TIMES USED IN THIS PROGRAM ARE IN GREENWICH
  30. 390! MEAN TIME.  IN ADDITION, ALL TIMES ARE IN THE 0000 TO 2400
  31. 395! HOUR SYSTEM.
  32. 400!
  33. 410! THE BASIC USED IN THIS PROGRAM HAS BEEN KEPT AS EL!ENTARY
  34. 420! AS POSSIBLE TO FACILITATE ITS USE ON OTHER TIME SHARING
  35. 430! SYSTEMS.  I WISH TO ACKNOWLEDGE THE GENEROUS ASSISTANCE OF
  36. 440! THOMAS AKE OF THE WARNER-SWASEY OBSERVATORY, WITHOUT WHOM
  37. 450! THE VITAL EQUATIONS FOR COMPUTING THE MOON'S POSITION WOULD
  38. 455! NOT HAVE BEEN AVAILABLE.
  39. 460!
  40. 470!                    LANCE COLLISTER
  41. 480!                    WA1JXN/WA3GPL
  42. 490!                    CLEVELAND, OHIO
  43. 500!                    MARCH 1974
  44. 510!
  45. 520!
  46. 530 DIM F(25), V(25), Y(25), Q(25), S(25)
  47. 540 DEF FNA(X)=INT(X*D5*10+.5)/10
  48. 550 DEF FNB(X)=(X-INT(X))*P5
  49. 560 LET P5=2.0000000000*3.1415926535
  50. 570 LET D5=360.0000000000/P5 : ! CONVERSION TO DEGREES
  51. 580 LET R5=P5/360.0000000000 : ! CONVERSION TO RADIANS
  52. 583 STRING Z8
  53. 584 PRINT
  54. 585 PRINT "WHAT ARE THE CALL LETTERS OF THE STATION":
  55. 586 INPUT Z8
  56. 590 PRINT "WHAT IS THE LATITUDE IN DEGREES, MINUTES":
  57. 600 INPUT L5,U5
  58. 610 PRINT "WHAT IS THE LONGITUDE IN DEGREES, MINUTES":
  59. 620 INPUT L6,U6
  60. 630 LET L5=(L5+U5/60)*R5
  61. 640 LET L6=(L6+U6/60)*R5
  62. 650 PRINT "WHAT IS THE DESIRED PRINTING INCREMENT IN MINUTES":
  63. 660 INPUT I
  64. 670 PRINT "DO YOU ONLY WANT PRINTOUT WHEN THE MOON"
  65. 680 PRINT "IS NEAR THE HORIZON":
  66. 690 INPUT B$
  67. 700 IF B$="YES" THEN 730
  68. 710 LET I6=100
  69. 720 GOTO 800
  70. 730 PRINT "BELOW WHAT ELEVATION IN DEGREES DO YOU WANT PRINTOUT TO OCCUR":
  71. 740 INPUT I6
  72. 750 PRINT "WHAT ARE THE GMT MONTH,DAY,YEAR DESIRED":
  73. 760 FOR N=1 TO 25
  74. 770 INPUT F(N),V(N),Y(N),Q(N),S(N)
  75. 780 IF F(N)=0 THEN 860
  76. 790 GOTO 760
  77. 800 PRINT "WHAT ARE THE GMT MONTH,DAY,YEAR,TIME INTERVAL (BEGINNING,"
  78. 810 PRINT "ENDING) DESIRED":
  79. 820 FOR N=1 TO 25
  80. 830 INPUT F(N),V(N),Y(N),Q(N),S(N)
  81. 840 IF F(N)=0 THEN 860
  82. 850 GOTO 820
  83. 860 LET N5=N-1
  84. 870 FOR N=1 TO N5
  85. 880 IF B$="YES" THEN 900
  86. 890 GOTO 930
  87. 900 LET E1=2400
  88. 910 LET B=0
  89. 920 GOTO 950
  90. 930 LET E1=S(N)
  91. 940 LET B=Q(N)
  92. 950 LET M=F(N)
  93. 960 LET D=V(N)
  94. 970 LET Y=Y(N)
  95. 980 LET Y1=Y-(INT(Y/100)*100)
  96. 990 PRINT
  97. 1000 PRINT
  98. 1010 PRINT "POSITION OF MOON ON ":M:"/":D:"/":Y1:"GMT"
  99. 1020 PRINT
  100. 1030 PRINT "GMT","AZ","EL","GHA","DEC"
  101. 1040 PRINT "---","--","--","---","---"
  102. 1050 PRINT
  103. 1060 LET I1=2
  104. 1070 !HERE BEGINS CALCULATION OF JULIAN DATE
  105. 1080 IF M>=3 THEN 1160
  106. 1090 IF INT((Y-1853)/4)<11 THEN 1120
  107. 1100 LET C1=-1
  108. 1110 GOTO 1130
  109. 1120 LET C1=0
  110. 1130 LET J1=365*(Y-1853)+D+30*(M+9)+INT((M+10)/2)
  111. 1140 LET J2=INT((Y-1853)/4)+1+C1
  112. 1150 GOTO 1270
  113. 1160 IF INT((Y-1852)/4)<11 THEN 1190
  114. 1170 LET C1=-1
  115. 1180 GOTO 1200
  116. 1190 LET C1=0
  117. 1200 IF M=9 THEN 1240
  118. 1210 IF M=11 THEN 1240
  119. 1220 LET C2=0
  120. 1230 GOTO 1250
  121. 1240 LET C2=1
  122. 1250 LET J1=365*(Y-1852)+D+30*(M-3)+INT((M-2)/2)
  123. 1260 LET J2=INT((Y-1852)/4)+C1+C2
  124. 1270 LET J=J1+J2 !(JULIAN DATE-2397547.5) FOR 0 HOURS GMT
  125. 1280 LET T1=J-17472.5
  126. 1290 LET D9=(B-INT(B/100)*100)+INT(B/100)*60
  127. 1300 LET D6=(E1-INT(E1/100)*100)+INT(E1/100)*60
  128. 1310 LET D7=D9-D6
  129. 1320 LET D8=D7-I
  130. 1330 IF D7>0 THEN 1350
  131. 1340 GOTO 1380
  132. 1350 IF D8>=0 THEN 2220
  133. 1360 LET B=E1
  134. 1370 !CALCULATION OF LATITUDE AND LONGITUDE OF MOON
  135. 1380 LET T=(B-INT(B/100)*100)/1440+INT(B/100)*24
  136. 1390 LET T5=T1+T
  137. 1400 LET K1=FNB(.751213+.036601102*T5)
  138. 1410 LET K2=FNB(.822513+.0362916457*T5)
  139. 1420 LET K3=FNB(.995766+.00273777852*T5)
  140. 1430 LET K4=FNB(.974271+.0338631922*T5)
  141. 1440 LET K5=FNB(.0312525+.0367481957*T5)
  142. 1450 LET L8=K1+.658*R5*SIN(2*K4)+6.289*R5*SIN(K2)
  143. 1460 LET L8=L8-1.274*R5*SIN(K2-2*K4)-.186*R5*SIN(K2-2*K4)-.186*R5*SIN(K3)
  144. 1470 LET L8=L8+.214*R5*SIN(2*K2)-.114*R5*SIN(2*K5)
  145. 1480 LET L8=L8-.059*R5*SIN(2*K2-2*K4)-.057*R5*SIN(K2+K3-2*K4)
  146. 1490 LET K6=K5+.6593*R5*SIN(2*K4)+6.2303*R5*SIN(K2)-1.272*R5*SIN(K2-2*K4)
  147. 1500 LET L7=5.144*R5*SIN(K6)-.146*R5*SIN(K5-2*K4)
  148. 1510 !CALCULATION OF RIGHT ASCENSION (A=R1) AND DECLINATION (D1)
  149. 1520 LET D1=COS(L7)*SIN(L8)*.397821+SIN(L7)*.917463
  150. 1530 LET D1=ATN(D1/(SQR(1-D1^2)))
  151. 1540 LET A2=COS(L7)*COS(L8)/COS(D1)
  152. 1550 LET A2=COS(L7)*SIN(L8)*.917463-SIN(L7)*.397821)/COS(D1)
  153. 1560 LET A=ATN(A1/A2)
  154. 1570 GOSUB 1860
  155. 1580 LET R1=A
  156. 1590 LET L1=.065709822*T1
  157. 1600 LET L=T*24*1.002738+6.646055+(L1-INT(L1/24)*24
  158. 1610 LET L=(L-INT(L/24)*24)
  159. 1620! CALCULATION OF GREENWICH HOUR ANGLE,G, FROM LOCAL SIDEREAL TIME
  160. 1630 LET G=(L/24)*P5-R1
  161. 1640 IF G<P5 THEN 1670
  162. 1650 G=G-P5
  163. 1660 GOTO 1710
  164. 1670 IF G<0 THEN 1690
  165. 1680 GOTO 1710
  166. 1690 G=G+P5
  167. 1700! CALCULATION OF YOUR LOCAL HOUR ANGLE,H, FROM GHA
  168. 1710 LET H=L6-G
  169. 1720! CALCULATION OF ELEVATION,E, OF OBJECT
  170. 1730 LET E3=COS(L5)*COS(H)*COS(D1)+SIN(D1)*SIN(L5) !SIN OF ELEVATION
  171. 1740 LET E2=SQR(1-(E3*E3))
  172. 1750 LET E=ATN(E3/E2)
  173. 1760 IF E<0 THEN 2170
  174. 1770 IF E>I6*R5 THEN 2170
  175. 1780! CALCULATION OF AZIMUTH,A, OF OBJECT
  176. 1790 LET A2=SIN(D1)/(COS(L5)*COS(E))
  177. 1800 LET A2=A2-(SIN(L5)/COS(L5))*(SIN(E)/COS(E))
  178. 1810 LET A1=SIN(L5)*SIN(D1)+COS(L5)*COS(D1)*COS(H)
  179. 1820 LET A1=(SIN(H)*COS(D1))/(SQR(1-A1^2))
  180. 1830 LET A=ATN(A1/A2) !AZIMUTH=ARCTAN (SIN OF AZ/COS OF AZ)
  181. 1840 GOSUB 1860
  182. 1850 GOTO 2020
  183. 1860! REMOVAL OF AMBIGUITIES INCURRED WITH ATN FUNCTION
  184. 1870 IF A=0 THEN 1890
  185. 1880 GOTO 1930
  186. 1890 IF A2<0 THEN 1910
  187. 1900 GOTO 2010
  188. 1910 LET A=P5/2
  189. 1920 GOTO 2010
  190. 1930 IF A>0THEN 1990
  191. 1940 IF A2<0 THEN 1970
  192. 1950 LET A=P5+A
  193. 1960 GOTO 2010
  194. 1970 LET A=P5+(A-P5/2)
  195. 1980 GOTO 2010
  196. 1990 IF A2>=0 THEN 2010
  197. 2000 LET A=A+P5/2
  198. 2010 RETURN
  199. 2020 IF (T-I1)>(2*I)/1440 THEN 2040
  200. 2030 GOTO 2145
  201. 2040 PRINT
  202. 2145 PRINT IN FORM "4D":(INT(B+.5))
  203. 2150 PRINT IN IMAGE "          %%%.%          %%.%
  204. %%%.%         %%%.%":FNA(A),FNA(E),FNA(G),FNA(D1)
  205. 2160 LET I1=T
  206. 2170 LET B=B+1
  207. 2180 LET Z=(B-INT(B/100)*100)-60
  208. 2190 IF Z<0 THEN 1290
  209. 2200 LET B=INT(B/100)*100+1100+Z
  210. 2210 GOTO 1290
  211. 2220 NEXT N
  212. 2230 LET N=0
  213. 2240 PRINT
  214. 2250 PRINT
  215. 2260 PRINT
  216. 2270 PRINT "DO YOU WANT MORE INFORMATION":
  217. 2280 INPUT D$
  218. 2290 IF D$="YES" THEN 540
  219. 2300 END
  220.