forked from robhagemans/basicode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
A11_Spirograaf.bc3
158 lines (157 loc) · 5.51 KB
/
A11_Spirograaf.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
1000 A=500:GOTO20:REM SPIRO-GRAPH
1010 REM REGELLENGTE IN HL, AANTAL REGELS IN VL
1020 HL=HO:VL=VE
1030 REM KIES GRAFISCH SCHERM EN TEKEN DE PROGRAMMANAAM
1040 GOSUB600:CN=0
1050 REM LEES EEN GETAL UIT DE DATA REGELS
1060 READHO
1070 REM ALS HO NU -2 IS, IS DE TEKENING AF.
1080 IFHO=-2 THEN1170
1090 REM WANNEER HO NU -1 IS --> NIEUW BEGINPUNT
1100 IFHO>-1 THEN1140
1110 READHO,VE:HO=HO*.03125:VE=VE*.0625:GOSUB620
1120 GOTO1060
1130 REM LEES VERTICALE COORDINAAT, CONVERTEER EN TEKEN
1140 READVE:HO=HO*.03125:VE=VE*.0625:GOSUB630
1150 GOTO1060
1160 REM
1170 REM SINUS/COSINUS TABEL SAMENSTELLEN
1180 DIMSI(360),CO(360)
1190 FORT=0 TO45
1200 H=.01745329252*T:S=SIN(H):A=.74*S:C=COS(H):B=.74*C
1210 SI(T)=S:SI(90-T)=C:CO(T)=B:CO(90-T)=A
1220 SI(180-T)=S:SI(90+T)=C:CO(180-T)=-B:CO(90+T)=-A
1230 SI(180+T)=-S:SI(270-T)=-C:CO(180+T)=-B:CO(270-T)=-A
1240 SI(360-T)=-S:SI(270+T)=-C:CO(360-T)=B:CO(270+T)=A
1250 NEXTT
1260 REM
1270 REM EVENTUEEL UITLEG
1280 GOSUB100:PRINT"Wil je uitleg (Toets J of N)? ";
1290 GOSUB210
1300 IFIN=78 THEN1600
1310 IFIN<>74 THEN1290
1320 REM
1330 GOSUB100:V$="":RT=0
1340 REM PRINT TEKST VANUIT DATA REGELS
1350 REM LENGTE V$>REGELLENGTE? OK
1360 IFLEN(V$)>HL THEN1430
1370 REM HAAL REGEL UIT DATA REGELS
1380 READD$
1390 REM LEGE REGEL OF EINDE TEKST? PRINT V$
1400 IF(D$="#")OR(D$="@") THENT=LEN(V$):GOTO1470
1410 REM INGELEZEN REGEL BIJ DE 'VOORRAAD'
1420 V$=V$+D$:GOTO1360
1430 REM ZOEK DE LAATSTE SPATIE
1440 T=HL
1450 IFT=0 THENT=HL:GOTO1480
1460 IFMID$(V$,T,1)<>" " THENT=T-1:GOTO1450
1470 REM PRINT DE REGEL
1480 PRINTMID$(V$,1,T):RT=RT+1
1490 REM HAAL DE GEPRINTE REGEL UIT DE VOORRAAD
1500 IFLEN(V$)=T THENV$="":GOTO1530
1510 V$=RIGHT$(V$,LEN(V$)-T)
1520 REM EV. VOLGENDE REGEL
1530 IF(RT<(VL-2))AND(D$<>"@") THEN1360
1540 REM EINDE VAN PAGINA OF TEKST
1550 HO=1:VE=VL:GOSUB110
1560 PRINT"Druk op 'n toets ";:GOSUB210
1570 IFD$<>"@" THEN GOSUB100:RT=0:GOTO1360
1580 REM
1590 REM STRAAL EN OVERBRENGING OPVRAGEN
1600 GOSUB100
1610 PRINT:PRINT"Geef de straal (0..1) ":INPUTKL
1620 IF(KL<0)OR(KL>=1) THEN1610
1630 PRINT:PRINT"Overbrenging ((-) 0.1..20) ":INPUTVH
1640 IF(ABS(VH)>20)OR(ABS(VH)<.1) THEN1630
1650 REM
1660 REM INGEGEVEN WAARDES AANPASSEN, ZODAT DE TEKENING
1670 REM BUITEN HET TEKENVENSTER KAN KOMEN
1680 KL=KL/2.01:SZ=.4975-KL
1690 SC=5-(HG*VG*ABS(VH))/150000:IFSC<.5 THENSC=.5
1700 REM
1710 REM KIES GRAFISCH SCHERM EN TEKEN 1E PUNT
1720 GOSUB600:HO=.868266666:VE=.5:GH=0:KH=0:CN=0:GOSUB620
1730 REM
1740 REM BEREKEN EN TEKEN LIJN NAAR NIEUW PUNT
1750 HO=.5+SZ*CO(GH)+KL*CO(KH)
1760 VE=.5+SZ*SI(GH)+KL*SI(KH)
1770 GOSUB630
1780 GH=GH+SC:IFGH>360 THENGH=GH-360
1790 KH=KH+SC*VH
1800 IFKH>360 THENKH=KH-360
1810 IFKH<0 THENKH=KH+360
1820 REM
1830 REM KIJK NAAR EV. INGEDRUKTE TOETS
1840 GOSUB200:IFIN$="" THEN1750
1850 IFIN=83 THEN950
1860 GOSUB100:GOTO1610
25000 REM DATA VOOR SPIRO-GRAAF INTRODUCTIE TEKENING
25010 REM -1 BETEKENT NIEUW BEGINPUNT
25020 REM -2 BETEKENT EINDE DATA
25030 REM ANDER GETAL BEPAALT EINDPUNT VAN EEN LIJN
25040 REM
25050 REM S
25060 DATA-1,4,1,3,0,1,0,0,1,0,2,1,3,3,3,4,4
25070 DATA4,5,3,6,1,6,0,5
25080 REM P
25090 DATA-1,6,6,6,0,9,0,10,1,10,2,9,3,6,3
25100 REM I
25110 DATA-1,12,0,14,0,13,0,13,6,14,6,12,6
25120 REM R
25130 DATA-1,16,6,16,0,19,0,20,1,20,2,19,3
25140 DATA16,3,17,3,20,6
25150 REM O
25160 DATA-1,22,5,22,1,23,0,25,0,26,1,26,5
25170 DATA25,6,23,6,22,5
25180 REM -
25190 DATA-1,28,3,30,3
25200 REM G
25210 DATA-1,5,10,4,9,2,9,1,10,1,14,2,15,4,15
25220 DATA5,14,5,12,3,12
25230 REM R
25240 DATA-1,7,15,7,9,10,9,11,10,11,11,10,12
25250 DATA7,12,8,12,11,15
25260 REM A
25270 DATA-1,13,15,13,10,14,9,16,9,17,10,17,12
25280 DATA13,12,17,12,17,15
25290 REM A
25300 DATA-1,19,15,19,10,20,9,22,9,23,10,23,12
25310 DATA19,12,23,12,23,15
25320 REM F
25330 DATA-1,25,15,25,12,28,12,25,12,25,9,29,9
25340 REM EINDE
25350 DATA-2
25360 REM
25370 REM DE UITLEG
25380 REM
25390 DATA"De SPIRO-GRAAF is een grote ring met tandjes,"
25400 DATA" waarin een kleiner tandwiel past.","#"
25410 DATA"In dit kleine wiel zitten gaatjes en als je "
25420 DATA"een balpen in een van die gaatjes stopt, "
25430 DATA"kan je het kleine wiel in de grote ring "
25440 DATA"ronddraaien.","#"
25450 DATA"Door de maat van het kleine wiel "
25460 DATA"(overbrengverhouding) en de keuze van het "
25470 DATA"gaatje (straal van kleine cirkel) te "
25480 DATA"veranderen, ontstaan de mooiste figuren "
25490 DATA"op papier.","#","#"
25500 DATA"Deze procedure wordt door dit Basicode 3 "
25510 DATA"programma gesimuleerd. Je moet 2 getallen "
25520 DATA"intikken om de straal en overbrengverhouding "
25530 DATA"in te stellen, waarna het programma een figuur "
25540 DATA"tekent. Voor de straal kan je een getal van 0 "
25550 DATA"tot 1 kiezen en voor de overbrenging een "
25560 DATA"getal van -20 tot +20.","#"
25570 DATA"Wanneer je tijdens het tekenen een "
25580 DATA"toets indrukt wordt de tekening gewist en mag "
25590 DATA"je andere getallen intikken, tenzij je op de "
25600 DATA"'S' toets drukt, want dan stopt het programma."
25610 DATA"@"
32000 REM +---------------------------------------------+
32010 REM ! SPIRO-GRAAF IS GESCHREVEN DOOR P.ZEVENHOVEN !
32020 REM ! !
32030 REM ! EERSTE PUBLICATIE IN C.U.C. INFO NUMMER 2/3 !
32040 REM ! !
32050 REM ! AANGEPAST AAN BASICODE 3 IN JANUARI 1986 !
32060 REM +---------------------------------------------+
32070 REM TROS RADIO dd 860802