home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / david4 / sunset.bas < prev    next >
BASIC Source File  |  1986-11-21  |  3KB  |  86 lines

  1.  
  2. 10 REM One note regarding azimuth angles: In the SOUTHERN hemisphere, 
  3. 20 REM this program assumes that the South Pole is zero degrees, and 
  4. 30 REM the azimuth angle is measured COUNTER-clockwise through East. 
  5. 40 REM Therefore, an azimuth angle of 108 degrees is NORTH of East. 
  6. 50 REM When Lat and Long are input, use a negative value for Southern 
  7. 60 REM Latitudes and for Eastern Longitudes. 
  8. 70 REM ----------------- Program Begins --------------------------- 
  9. 80 CLS 
  10. 90 PRINT"This program finds the declination of the sun, the equation" 
  11. 100 PRINT"of time, the azimuth angles of sunrise and sunset, and the" 
  12. 110 PRINT"times of sunrise and sunset for any point on earth." 
  13. 120 PRINT 
  14. 130 PRINT"Input eastern longitudes and southern latitudes as NEGATIVE." 
  15. 140 PRINT 
  16. 150 PRINT 
  17. 160 REM 
  18. 170 REM 
  19. 180 DIM N(12) 
  20. 190 PL=3.14159/26:J=57.2958 
  21. 200 INPUT"ENTER LATITUDE (FORMAT DD.MM)";D1 
  22. 210 INPUT"ENTER LONGITUDE (FORMAT DD.MM)";D2 
  23. 220 GOSUB 780 
  24. 230 LA = D1 
  25. 240 IF LA < 0 THEN LA = LA + 180 
  26. 250 IF D2 < 0 THEN D2 = D2 + 360 
  27. 260 LO = FIX(D2/15)*15 :REM finds time zone beginning 
  28. 270 TD=(D2-LO)/15 
  29. 280 INPUT"ENTER MONTH,DAY (11,25)";M,DA 
  30. 290 FOR I=1 TO 12: READ N(I):NEXT I 
  31. 300 DATA 0,31,59,90,120,151 
  32. 310 DATA 181,212,243,273,304,334 
  33. 320 X=(N(M)+DA)/7 
  34. 330 REM 
  35. 340 D=.4560001-22.195*COS(PL*X)-.43*COS(2*PL*X)-.156*COS(3*PL*X)+3.83*SIN(PL*X)+.06*SIN(2*PL*X)-.082*SIN(3*PL*X) 
  36. 350 REM 
  37. 360 PRINT 
  38. 370 PRINT"DECLINATION OF SUN:"; 
  39. 380 PRINT USING"###.#";D; 
  40. 390 PRINT" DEGREES" 
  41. 400 E=8.000001E-03+.51*COS(PL*X)-3.197*COS(2*PL*X)-.106*COS(3*PL*X)-.15*COS(4*PL*X)-7.317001*SIN(PL*X)-9.471001*SIN(2*PL*X)-.391*SIN(3*PL*X)
  42. 410 REM 
  43. 420 PRINT"EQUATION OF TIME:"; 
  44. 430 PRINT USING"###.#";E; 
  45. 440 PRINT" MINUTES" 
  46. 450 CL=COS(LA/J):SD=SIN(D/J):CD=COS(D/J):Y=SD/CL 
  47. 460 IF ABS(Y)=>1 THEN PRINT"NO SUNRISE OR SUNSET":END 
  48. 470 Z = 90 - J*ATN(Y/SQR(1-Y*Y)) 
  49. 480 PRINT"AZIMUTH OF SUNRISE:"; 
  50. 490 PRINT USING"####.#";ABS(Z); 
  51. 500 PRINT" DEGREES" 
  52. 510 PRINT"AZIMUTH OF SUNSET: "; 
  53. 520 PRINT USING"####.#";360-ABS(Z); 
  54. 530 PRINT" DEGREES" 
  55. 540 ST=SIN(Z/J)/CD 
  56. 550 IF ABS(ST)>=1 THEN T=6:TT=6:GOTO 590 
  57. 560 CT=SQR(1-ST*ST) 
  58. 570 T=J/15*ATN(ST/CT) 
  59. 580 TT=T 
  60. 590 IF D<0 AND LA<90 THEN T=12-T:TT=T 
  61. 600 IF D>0 AND LA>90 THEN T=12-T: TT=T 
  62. 610 T=T+TD-E/60-.04 
  63. 620 GOSUB 690 
  64. 630 PRINT"TIME OF SUNRISE:";T1$;":";T2$;" ";T$;"L.T. ";GM$;":";T2$;" GM" 
  65. 640 T=12-TT:T=T+TD-E/60+.04 
  66. 650 CNT=1 
  67. 660 GOSUB 690 
  68. 670 PRINT"TIME OF SUNSET: ";T1$;":";T2$;" ";T$;"L.T. ";GM$;":";T2$;" GM" 
  69. 680 END 
  70. 690 T1=INT(T):T2=T-T1:T1$=STR$(T1):T2=INT((T2*600+5)/10) 
  71. 700 T2$=STR$(T2):T2$=RIGHT$(T2$,LEN(T2$)-1) 
  72. 710 IF INT(T2)<10 THEN T2$="0"+T2$ 
  73. 720 GM = FIX(D2/15) :REM calculate difference between GM and local time 
  74. 730 IF CNT = 0 THEN GM = VAL(T1$)+GM :REM GMT for sunrise 
  75. 740 IF CNT > 0 THEN GM = VAL(T1$)+12+GM :REM GMT for sunset 
  76. 750 IF GM +(VAL(T2$)/60)> 24 THEN GM = GM - 24 
  77. 760 GM$ = STR$(GM) :GM$ = RIGHT$("0"+GM$,2) 
  78. 770 RETURN 
  79. 780 REM This subroutine converts DD.MM input to DD.DD 
  80. 790 DEGTMP = (ABS(D1)-ABS(FIX(D1))) *100/60 
  81. 800 D1 = (FIX(ABS(D1))+DEGTMP)*SGN(D1)
  82. 810 DEGTMP = (ABS(D2)-ABS(FIX(D2))) *100/60
  83. 820 D2 = (FIX(ABS(D2))+DEGTMP)*SGN(D2)
  84. 830 RETURN
  85. 840 END
  86.