forked from robhagemans/basicode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
B11_Aardbol_in_dag_en_nacht.bc3
308 lines (307 loc) · 10.1 KB
/
B11_Aardbol_in_dag_en_nacht.bc3
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
1000 A=500:GOTO20:REM +++ AARDE IN DAG EN NACHT +++
1010 GOSUB9030:REM uitleg
1020 R1=.0174532925:REM graden naar radialen
1030 C0=25E-4:C1=SIN(C0*R1):REM verhoudingsconstanten
1040 A3=C0*318/3:A4=C0*318/4:REM formaat bolprojectie
1050 A6=A3/C0/R1:A8=A4/C0/R1
1060 XM=900:YM=450:REM hoekpunt vlakke kaart
1070 DIMX(55),Y(55):REM uit data
1080 GOSUB8030:REM initialisatie en invoer
1090 GOSUB600:REM grafisch scherm
1100 GOSUB2030:REM witte achtergronden
1110 GOSUB2530:REM teksten rechtsonder
1120 GOSUB3030:REM teken dag/nacht-zone
1130 KK=180-KH:KL=LT+180:KP=-KV
1140 GOSUB4030:REM teken vlakke dag/nacht-zone
1150 VB=1:GOSUB5030:REM teken vlakke kaart
1160 VB=2:REM code voor bolvorm
1170 XC=.75:YC=.27:REM middelpunt
1180 KK=180-KH:KL=LT+180:KP=-KV
1190 CN=0:GOSUB3530:REM teken witte nachtkaart
1200 XC=.25:YC=.27:REM middelpunt
1210 KK=KH:KL=LT:KP=KV
1220 CN=1:GOSUB3530:REM teken zwarte dagkaart
1230 CN=1:HO=.92:VE=.96:SR$="=>":GOSUB650:GOSUB250
1240 GOSUB210:GOTO950
2000 REM
2010 REM *** teken witte gebieden ***
2020 REM
2030 CN=0:REM wit
2040 REM Maak alles behalve rechterbovenhoek wit
2050 FORY=1 TOVG:VE=(Y-.7)/VG
2060 HO=0:GOSUB620
2070 HO=.999:IFVE<.56152 THENHO=.5
2080 GOSUB630
2090 NEXTY
2100 RETURN
2500 REM
2510 REM *** teksten rechtsonder ***
2520 REM
2530 CN=1:REM zwarte tekst
2540 HO=.71:VE=19/32:SR$="DAG EN":GOSUB650
2550 VE=20/32:SR$=" NACHT":GOSUB650
2560 HO=.72:VE=.69:SR$="maand":GOSUB650
2570 CT=6:CN=0:SR=MA:GOSUB310:CN=1:VE=.72:GOSUB650
2580 VE=.77:SR$="dag":GOSUB650
2590 SR=DA:CN=0:GOSUB310:CN=1:VE=.79:GOSUB650
2600 VE=.84:SR$="uur":GOSUB650
2610 SR=UU:CN=0:GOSUB310:CN=1:VE=.87:GOSUB650
2620 RETURN
3000 REM
3010 REM *** teken dag/nacht-zone ***
3020 REM
3030 CN=1:A=KH-90:YN=.561:PN=-1
3040 IFA=0 THENA=0.5
3050 IFA<0 THENYN=1-1/VG:A=-A:PN=1
3060 SA=SIN(R1*A):CA=COS(R1*A)
3070 XE=.7*HG:XF=XE*LT/360+.01516*HG
3080 FORIX=0 TOXE
3090 XR=360*IX/XE
3100 YT=CA/SQR(1+(SA*TAN(XR*R1))^2)
3110 IF(XR>90)AND(XR<270) THENYT=-YT
3120 IFABS(YT)=1 THENYT=SGN(YT)*90:GOTO3140
3130 YT=.2195-.13973*ATN(YT/SQR(1-YT*YT))
3140 IFPN<0 THENYT=-YT
3150 HO=(IX-XF)/HG:IFHO>.7 THENHO=HO-.7
3160 IFHO<0 THENHO=HO+.7
3170 VE=YN:GOSUB620:VE=VE-YT:GOSUB630
3180 NEXTIX
3190 REM
3200 REM teken kader om rechthoek
3210 REM
3220 CN=0:HO=0:VE=.561:GOSUB620
3230 HO=.7+1/HG:GOSUB630:VE=1-1/VG:GOSUB630
3240 CN=1:HO=0:VE=.561-1.1/VG:GOSUB620
3250 HO=.7:GOSUB630:VE=1-1/VG:GOSUB630
3260 RETURN
3500 REM
3510 REM *** kaartje tekenen ***
3520 REM
3530 RESTORE
3540 GOSUB4030:REM variabelen
3550 GOSUB4530:REM rand
3560 GOSUB5030:REM kaart
3570 GOSUB5530:REM meridianen + br.cirkels
3580 RETURN
4000 REM
4010 REM *** Projectiematrix ***
4020 REM
4030 H2=R1*KL:G2=SIN(H2):H2=COS(H2)
4040 Y1=R1*KK:X1=SIN(Y1):Y1=COS(Y1)
4050 P2=-H2*Y1:Q2=-G2*Y1
4060 Q1=R1*KP:P1=COS(Q1):Q1=SIN(Q1)
4070 RETURN
4500 REM
4510 REM *** rand ***
4520 REM
4530 HO=XC:VE=YC-A3:GOSUB620
4540 FORT=0 TO360 STEP10
4550 RT=R1*T:HO=XC+A4*SIN(RT)
4560 VE=YC-A3*COS(RT):GOSUB630
4570 NEXTT
4580 RETURN
5000 REM
5010 REM *** DATA-blokjes inlezen ***
5020 REM
5030 AC=1
5040 READX(AC),Y(AC):IFY(AC)>0 THENAC=AC+1:GOTO5040
5050 ONVB GOSUB6530,6030:REM vlak cq bol tekenen
5060 IFX(AC)>0 THEN5030
5070 RETURN
5500 REM
5510 REM *** Meridianen en breedtecirkels ***
5520 REM
5530 FORXP=0 TO300 STEP60
5540 FORYP=0 TO180 STEP10
5550 GOSUB7030:IFZB>0 THEN GOSUB620
5560 NEXTYP
5570 NEXTXP
5580 FORYP=45 TO135 STEP45
5590 FORXP=0 TO360 STEP10
5600 GOSUB7030:IFZB>0 THEN GOSUB620
5610 NEXTXP
5620 NEXTYP
5630 RETURN
6000 REM
6010 REM *** Kaart in bolvorm tekenen ***
6020 REM
6030 HS=0:RS=1:T=1
6040 REM herhalingslus
6050 XP=X(T):YP=Y(T):GOSUB7030
6060 IFZB<0 THENT=T+5:HS=1:RS=1:GOTO6120
6070 IFHS=1 THENT=T-4:HS=0:RS=1:GOTO6120
6080 IFT=1 THENRS=1
6090 IFRS=1 THEN GOSUB620:GOTO6110
6100 GOSUB630
6110 T=T+1:RS=0
6120 IFT<AC THEN6050
6130 RETURN
6500 REM
6510 REM *** Kaart vlak tekenen ***
6520 REM
6530 FORT=1 TOAC-1
6540 XP=X(T):YP=Y(T):GOSUB7530
6550 CN=0:IFZB<0 THENCN=1
6560 HO=(350-XP)/512:VE=(229+YP)/409
6570 IFT=1 THENZ0=ZB:H0=HO:V0=VE:GOSUB620:GOTO6620
6580 IFZ0*ZB>0 THEN6610
6590 CN=1-CN:H1=HO:V1=VE:HO=(HO+H0)/2:VE=(VE+V0)/2:GOSUB630
6600 CN=1-CN:HO=H1:VE=V1
6610 GOSUB630:Z0=ZB:H0=HO:V0=VE
6620 NEXTT
6630 RETURN
7000 REM
7010 REM *** bereken bolplotpositie ***
7020 REM
7030 GOSUB7530
7040 H1=ATN((-G2*X+H2*Y)*C1)
7050 G1=ATN((P2*X+Q2*Y+X1*Z)*C1)
7060 HO=XC-A8*(P1*H1+Q1*G1):VE=YC-A6*(-Q1*H1+P1*G1)
7070 RETURN
7500 REM
7510 REM *** bepaal zichtbaarheid ***
7520 REM
7530 X0=R1*XP:Y0=R1*YP:SY=SIN(Y0)
7540 X=SY*COS(X0):Y=SY*SIN(X0)
7550 Z=COS(Y0)
7560 ZB=X1*(H2*X+G2*Y)+Y1*Z
7570 RETURN:REM ZB<0 = niet zichtbaar
8000 REM
8010 REM *** Initialisatie en Invoer ***
8020 REM
8030 SR$="DAG en NACHT":GOSUB150:PRINT:PRINT:PRINT
8040 INPUT" Welke maand (1-12) ";MA
8050 IF(MA<1)OR(MA>12) THEN GOSUB250:GOTO8030
8060 INPUT" Welke dag (1-31) ";DA
8070 IF(DA<1)OR(DA>31) THEN GOSUB250:GOTO8060
8080 INPUT" Welk uur (0-24) ";UU
8090 IF(UU<0)OR(UU>24) THEN GOSUB250:GOTO8080
8100 I=DA+30*MA-20+VAL(MID$("110112234455",MA,1))
8110 I=R1*I*360/365
8120 KH=90+23.5*COS(I):KV=23.5*SIN(I):REM stand aardas
8130 LT=15*UU:REM tijdverschuiving in graden
8140 RETURN
9000 REM
9010 REM *** Uitleg ***
9020 REM
9030 VT=VE:VE=0:HO=INT(HO/2)-9:GOSUB110
9040 SR$="DAG EN NACHT":GOSUB150:PRINT:PRINT
9050 PRINT"Dit programma tekent de aarde.":PRINT
9060 PRINT"Eerst wordt gevraagd op welk tijdstip"
9070 PRINT"dus Maand-Dag-Uur.":PRINT
9080 PRINT"De eerste tekening is in de vorm van"
9090 PRINT"een rechthoek met daarop in wit waar"
9100 PRINT"het dag is en in zwart waar het nacht"
9110 PRINT"is.":PRINT
9120 PRINT"De tweede tekening is hoe een ruimte-"
9130 PRINT"vaarder de nachtkant zou zien en de"
9140 PRINT"derde tekening toont de aarde zoals"
9150 PRINT"die op dat moment vanaf de zon te"
9160 PRINT"zien is.":PRINT
9170 PRINT"U hebt er wel een computer met een"
9180 PRINT"redelijke resolutie en flink wat geduld"
9190 PRINT"voor nodig, maar dat wordt dan wel"
9200 PRINT"beloond."
9210 VE=VT:HO=0:PRINT"Druk op een toets ...";
9220 GOSUB210
9230 RETURN
25000 REM Afrika
25010 DATA148,59,160,57,162,61,170,56,170,54,185,55,190,60
25020 DATA197,68,197,76,188,83,177,83,170,85,171,92,166,99
25030 DATA168,105,165,115,162,124,154,123,149,120,145,110
25040 DATA139,105,140,94,136,86,128,77,136,79,143,70,148,63
25050 DATA1,-1
25060 REM Antarctica
25070 DATA0,168,15,168,10,162,40,157,70,157,115,155,165,160
25080 DATA191,162,210,170,260,170,240,165,240,155,250,160
25090 DATA280,163,305,165,340,168,350,168,1,-1
25100 REM Australie
25110 DATA66,112,65,127,64,125,52,122,45,125,42,122,40,128
25120 DATA31,128,28,123,26,117,34,110,37,102,40,108,44,105
25130 DATA43,103,49,103,55,105,60,110,66,112,1,-1
25140 REM Azie
25150 DATA148,63,140,70,135,77,128,74,121,67,129,66,132,60
25160 DATA124,63,113,65,107,70,103,82,100,75,93,69,88,69
25170 DATA87,74,83,72,82,80,75,88,75,85,80,80,80,77,75,81
25180 DATA71,77,74,70,63,67,59,59,63,51,54,51,54,56,51,53
25190 DATA52,50,45,46,40,39,45,35,37,31,20,30,25,35,23,40
25200 DATA16,30,10,30,-10,27,10,20,30,18,50,18,70,12,90,15
25210 DATA110,17,130,23,145,35,1,-1
25220 REM Europa
25230 DATA145,35,147,24,140,25,140,22,155,18,167,25,175,27
25240 DATA173,32,169,30,167,35,161,30,162,27,155,24,158,28
25250 DATA153,30,160,36,170,36,170,33,173,34,172,36,175,37
25260 DATA178,40,185,42,182,44,182,46,188,46,188,52,185,55
25270 DATA180,53,176,46,171,45,165,50,165,52,162,50,167,44
25280 DATA160,49,158,53,157,50,139,48,143,44,149,44,153,47
25290 DATA153,53,144,53,148,59,1,-1
25300 REM Noord-Amerika
25310 DATA340,33,330,30,315,35,305,40,305,48,300,56,290,67
25320 DATA292,60,285,70,273,75,262,82,258,83,257,81,260,80
25330 DATA262,81,264,75,268,75,268,68,275,72,278,68,275,61
25340 DATA262,60,260,65,260,58,253,51,245,45,245,40,235,36
25350 DATA254,27,258,34,260,39,265,35,275,28,262,22,280,24
25360 DATA302,20,315,22,340,18,340,33,1,-1
25370 REM Zuid-Amerika
25380 DATA251,77,258,82,258,86,262,95,257,104,251,109
25390 DATA252,117,253,127,255,142,245,145,249,140,245,135
25400 DATA235,127,228,115,222,112,218,104,214,95,225,92
25410 DATA230,90,235,85,240,82,247,80,251,77,1,-1
25420 REM Baffin-eiland
25430 DATA247,27,242,24,260,16,270,16,270,19,254,22,258,25
25440 DATA247,27,1,-1
25450 REM Borneo
25460 DATA64,94,70,93,71,89,62,84,61,89,64,94,1,-1
25470 REM Ellesmere-eiland
25480 DATA272,7,243,8,248,13,270,13,260,10,272,7,1,-1
25490 REM Engeland+Ierland
25500 DATA190,38,186,37,185,32,182,33,183,34,179,38,185,40
25510 DATA183,35,188,35,190,38,1,-1
25520 REM Filippijnen
25530 DATA59,72,54,79,57,80,55,85,53,82,57,80,57,78,60,76
25540 DATA59,72,1,-1
25550 REM Groenland
25560 DATA225,30,217,24,200,15,198,8,220,6,240,8,250,12
25570 DATA235,17,231,24,233,27,225,30,1,-1
25580 REM Japan
25590 DATA50,59,40,55,38,46,35,48,40,50,44,54,49,56,50,59
25600 DATA1,-1
25610 REM Kaspische Zee
25620 DATA127,42,134,44,131,52,127,54,127,48,130,45,127,42
25630 DATA1,-1
25640 REM Madagascar
25650 DATA136,115,133,114,130,103,135,106,138,112,136,115
25660 DATA1,-1
25670 REM Nieuw-Guinea
25680 DATA48,94,40,99,35,97,30,101,35,94,43,93,46,91,48,94
25690 DATA1,-1
25700 REM Nieuw-Zeeland
25710 DATA13,137,10,137,5,132,3,129,6,125,5,132,7,132
25720 DATA13,137,1,-1
25730 REM Sumatra+Java
25740 DATA85,85,75,97,61,99,70,97,75,97,75,93,85,85,1,-1
25750 REM Victoria-eiland
25760 DATA298,20,281,20,281,16,303,16,303,14,298,14,298,20
25770 DATA1,-1
25780 REM IJsland
25790 DATA201,26,193,25,195,24,203,25,201,26,-1,-1
25800 REM
30000 REM *************************
30010 REM * *
30020 REM * A A R D B O L *
30030 REM * *
30040 REM * Een public-domain *
30050 REM * programma voor de *
30060 REM * BBC-computer, *
30070 REM * *
30080 REM * Bewerkt naar *
30090 REM * B A S I C O D E - 3 *
30100 REM * door *
30110 REM * *
30120 REM * Stichting BASICODE *
30130 REM * Postbus 1410 *
30140 REM * 5602 BK Eindhoven *
30150 REM * *
30160 REM *************************
30170 REM
30180 REM TROS-RADIO dd. 890322