-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy path134.bas
More file actions
191 lines (190 loc) · 4.91 KB
/
Copy path134.bas
File metadata and controls
191 lines (190 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
'10 REM MOONRISE-MOONSET
11 DIM Ma(3,3)
12 '' mode =1 Automatic
13 mode=0
15 GOSUB 170
16 '' Chandler Arizona Latitude=33N18 Longitude=-111W50
17 B5=33+(18/60) : L5=-1*(111+(50/60))
18 H=7
19 if mode=1 then goto 30
20 INPUT "Lat, Long (Deg)";B5,L5
25 INPUT "Time Zone (Hrs)";H
30 L5=L5/360: Z0=H/24
35 GOSUB 760: T=(J-2451545)+F
40 GOSUB 245: T=T+Z0
45 REM
50 REM POSITION LOOP
55 FOR I=1 TO 3
60 GOSUB 495: Ma(I,1)=A5
65 Ma(I,2)=D7: Ma(I,3)=R5: T=T+0.5
70 NEXT
75 IF Ma(2,1)>Ma(1,1) THEN 85
80 Ma(2,1)=Ma(2,1)+P2
85 IF Ma(3,1)>Ma(2,1) THEN 95
90 Ma(3,1)=Ma(3,1)+P2
95 Z1=R1*(90.567-41.685/Ma(2,3))
100 S=SIN(B5*R1): C=COS(B5*R1)
105 Z=COS(Z1): M8=0: W8=0: PRINT
110 A0=Ma(1,1): D0=Ma(1,2)
115 FOR C0=0 TO 23
120 P=(C0+1)/24
125 F0=Ma(1,1):F1=Ma(2,1):F2=Ma(3,1)
130 GOSUB 225: A2=F
135 F0=Ma(1,2):F1=Ma(2,2):F2=Ma(3,2)
140 GOSUB 225: D2=F
145 GOSUB 285: A0=A2:D0=D2:V0=V2
150 NEXT
155 GOSUB 450: REM SPECIAL MSG?
156 if mode!=1 then goto 160
157 PRINT "Latitude ";B5;" Longitude ";L5*360;" TimeZone ";H
158 PRINT "Day/Month/Year ";nd$
160 END
165 REM
170 REM CONSTANTS
175 REM DIM Ma(3,3)
176 REM 14159265: P2=2*P1
180 P2=2*PI
185 R1=PI/180: K1=15*R1*1.0027379
190 S$="MOONSET AT "
195 R$="MOONRISE AT "
200 M1$="NO MOONRISE THIS DATE"
205 M2$="NO MOONSET THIS DATE"
210 M3$="MOON DOWN ALL DAY"
215 M4$="MOON UP ALL DAY"
220 RETURN
225 REM 3-POINT INTERPOLATION
230 A=F1-F0: B=F2-F1-A
235 F=F0+P*(2*A+B*(2*P-1))
240 RETURN
245 REM LST AT 0H ZONE TIME
250 T0=T/36525
255 S=24110.5+8640184.813*T0
260 S=S+86636.6*Z0+86400*L5
265 S=S/86400: S=S-INT(S)
270 T0=S*360*R1
275 RETURN
280 REM
285 REM TEST AN HOUR FOR AN EVENT
290 L0=T0+C0*K1: L2=L0+K1
295 IF A2< A0 THEN A2=A2+2*PI
300 H0=L0-A0: H2=L2-A2
305 H1=(H2+H0)/2: REM HOUR ANGLE
310 D1=(D2+D0)/2: REM DEC
315 IF C0> 0 THEN 325
320 V0=S*SIN(D0)+C*COS(D0)*COS(H0)-Z
325 V2=S*SIN(D2)+C*COS(D2)*COS(H2)-Z
330 IF SGN(V0)=SGN(V2) THEN 440
335 V1=S*SIN(D1)+C*COS(D1)*COS(H1)-Z
340 A=2*V2-4*V1+2*V0: B=4*V1-3*V0-V2
345 D=B*B-4*A*V0: IF D< 0 THEN 440
350 D=SQR(D)
355 IF V0< 0 AND V2> 0 THEN PRINT R$;
360 IF V0< 0 AND V2> 0 THEN M8=1
365 IF V0> 0 AND V2< 0 THEN PRINT S$;
370 IF V0> 0 AND V2< 0 THEN W8=1
375 E=(-B+D)/(2*A)
380 IF E> 1 OR E< 0 THEN E=(-B-D)/(2*A)
385 T3=C0+E+1/120: REM ROUND OFF
390 H3=INT(T3): M3=INT((T3-H3)*60)
395 PRINT USING "##:##";H3;M3;
400 H7=H0+E*(H2-H0)
405 N7=-COS(D1)*SIN(H7)
410 D7=C*SIN(D1)-S*COS(D1)*COS(H7)
415 A7=ATN(N7/D7)/R1
420 IF D7< 0 THEN A7=A7+180
425 IF A7< 0 THEN A7=A7+360
430 IF A7> 360 THEN A7=A7-360
435 PRINT USING ", AZ ###.#";A7
440 RETURN
445 REM
450 REM SPECIAL MESSAGE ROUTINE
455 IF M8=0 AND W8=0 THEN 475
460 IF M8=0 THEN PRINT M1$
465 IF W8=0 THEN PRINT M2$
470 GOTO 485
475 IF V2< 0 THEN PRINT M3$
480 IF V2> 0 THEN PRINT M4$
485 RETURN
490 REM
495 REM FUNDAMENTAL ARGUMENTS
500 L=0.606434+0.03660110129*T
505 M=0.374897+0.03629164709*T
510 F=0.259091+0.03674819520*T
515 D=0.827362+0.03386319198*T
520 N=0.347343-0.00014709391*T
525 G=0.993126+0.00273777850*T
530 L=L-INT(L): M=M-INT(M)
535 F=F-INT(F): D=D-INT(D)
540 N=N-INT(N): G=G-INT(G)
545 L=L*P2: M=M*P2: F=F*P2
550 D=D*P2: N=N*P2: G=G*P2
555 V=0.39558*SIN(F+N)
560 V=V+0.08200*SIN(F)
565 V=V+0.03257*SIN(M-F-N)
570 V=V+0.01092*SIN(M+F+N)
575 V=V+0.00666*SIN(M-F)
580 V=V-0.00644*SIN(M+F-2*D+N)
585 V=V-0.00331*SIN(F-2*D+N)
590 V=V-0.00304*SIN(F-2*D)
595 V=V-0.00240*SIN(M-F-2*D-N)
600 V=V+0.00226*SIN(M+F)
605 V=V-0.00108*SIN(M+F-2*D)
610 V=V-0.00079*SIN(F-N)
615 V=V+0.00078*SIN(F+2*D+N)
620 U=1-0.10828*COS(M)
625 U=U-0.01880*COS(M-2*D)
630 U=U-0.01479*COS(2*D)
635 U=U+0.00181*COS(2*M-2*D)
640 U=U-0.00147*COS(2*M)
645 U=U-0.00105*COS(2*D-G)
650 U=U-0.00075*COS(M-2*D+G)
655 W=0.10478*SIN(M)
660 W=W-0.04105*SIN(2*F+2*N)
665 W=W-0.02130*SIN(M-2*D)
670 W=W-0.01779*SIN(2*F+N)
675 W=W+0.01774*SIN(N)
680 W=W+0.00987*SIN(2*D)
685 W=W-0.00338*SIN(M-2*F-2*N)
690 W=W-0.00309*SIN(G)
695 W=W-0.00190*SIN(2*F)
700 W=W-0.00144*SIN(M+N)
705 W=W-0.00144*SIN(M-2*F-N)
710 W=W-0.00113*SIN(M+2*F+2*N)
715 W=W-0.00094*SIN(M-2*D+G)
720 W=W-0.00092*SIN(2*M-2*D)
725 REM
730 REM COMPUTE RA, DEC, DIST
735 S=W/SQR(U-V*V)
740 A5=L+ATN(S/SQR(1-S*S))
745 S=V/SQR(U):D7=ATN(S/SQR(1-S*S))
750 R5=60.40974*SQR(U)
755 RETURN
760 REM CALENDAR --> JD
761 '' Get current Date
762 nd$=DATE$
763 '' DATE$ - returns the current day as string "DD/MM/YYYY"
764 M=MID$(nd$,4,2)+0
765 Y=MID$(nd$,7,4)+0
766 Day=MID$(nd$,1,2)+0
767 if mode=1 then goto 770
768 INPUT "Y,M,D ";Y,Mo,D
770 G=1: IF Y< 1582 THEN G=0
775 D1=INT(D): F=D-D1-0.5
780 J=-INT(7*(INT((Mo+9)/12)+Y)/4)
785 IF G=0 THEN 805
790 S=SGN(Mo-9): A=ABS(Mo-9)
795 J3=INT(Y+S*INT(A/7))
800 J3=-INT((INT(J3/100)+1)*3/4)
805 J=J+INT(275*Mo/9)+D1+G*J3
810 J=J+1721027+2*G+367*Y
815 IF F>= 0 THEN 825
820 F=F+1: J=J-1
825 RETURN
900 REM ***************************
910 REM THIS PROGRAM COMPUTES THE
920 REM TIMES OF MOONRISE AND MOON-
930 REM SET ANYWHERE IN THE WORLD.
940 REM FROM SKY & TELESCOPE, JULY,
950 REM 1989, PAGE 78.
960 REM ***************************
'