-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy path2LINIEN.bc
205 lines (205 loc) · 5.83 KB
/
2LINIEN.bc
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
1000 A=200:GOTO20:REM 2 rechte lijnen
1010 DIMF(100)
1020 PRINT"Das Programm gibt die"
1030 PRINT"Formeln von zwei Geraden an"
1040 PRINT"und berechnet ihren "
1050 PRINT"Schnittpunkt.":PRINT:GOTO1500
1060 GOSUB100
1070 PRINT:PRINT"Noch mal ? (J/N)";
1080 GOSUB210:IFIN=78 THEN950
1090 PRINT:PRINT:PRINT
1500 PRINT"Gib die Koordinaten vom"
1510 PRINT"Anfangs- und Endpunkt der"
1520 PRINT"beiden Strecken an."
1530 PRINT
1540 A=0:B=0:C=0
1550 INPUT"erste Gerade x1 ";X1:X1=INT(X1)
1560 INPUT" y1 ";Y1:Y1=INT(Y1)
1570 INPUT" x2 ";X2:X2=INT(X2)
1580 INPUT" y2 ";Y2:Y2=INT(Y2)
1590 INPUT"zweite Gerade x3 ";X3:X3=INT(X3)
1600 INPUT" y3 ";Y3:Y3=INT(Y3)
1610 INPUT" x4 ";X4:X4=INT(X4)
1620 INPUT" y4 ";Y4:Y4=INT(Y4)
1630 REM--- 1e lijn--
1640 XA=X1:YA=Y1:XB=X2:YB=Y2
1650 GOSUB3020:A1=A:B1=B:C1=C:F1$=F$
1660 REM--- 2e lijn--
1670 XA=X3:YA=Y3:XB=X4:YB=Y4
1680 GOSUB3020:A2=A:B2=B:C2=C:F2$=F$
1690 REM---snijpunt---
1700 GOSUB3520
1710 REM---snijden de lijnstukken?---
1720 GOSUB4020
1730 PRINT"die Strecken schneiden sich ";
1740 IFSN=0 THENPRINT"nicht"
1750 PRINT
2000 REM---tekenen ---
2010 PRINT:PRINT"Druecke eine Taste ";:GOSUB210
2020 REM---uiterste waarden bepalen---
2030 LI=0:IFX1<LI THENLI=X1
2040 IFX2<LI THENLI=X2
2050 IFX3<LI THENLI=X3
2060 IFX4<LI THENLI=X4
2070 RE=0:IFX1>RE THENRE=X1
2080 IFX2>RE THENRE=X2
2090 IFX3>RE THENRE=X3
2100 IFX4>RE THENRE=X4
2110 BE=0:IFY1<0 THENBE=Y1
2120 IFY2<BE THENBE=Y2
2130 IFY3<BE THENBE=Y3
2140 IFY4<BE THENBE=Y4
2150 BO=0:IFY1>BO THENBO=Y1
2160 IFY2>BO THENBO=Y2
2170 IFY3>BO THENBO=Y3
2180 IFY4>BO THENBO=Y4
2190 REM---schaalbasis---
2200 LI=-LI:BE=-BE:H=RE+LI:V=BO+BE
2210 SB=V:IFH*.75>V THENSB=H
2220 IFSB=0 THENSB=1
2230 SV=.999/SB:SH=SV*.75
2240 RR=.9995-V*SV
2500 REM---assen---
2510 GOSUB600:CN=0
2520 HO=0:VE=RR+BO*SV:GOSUB620
2530 HO=.999:GOSUB630
2540 HO=LI*SH:VE=0:GOSUB620
2550 VE=.999:GOSUB630
2560 REM---schaalverdeling---
2570 CN=1:VE=RR+SV*BO
2580 FORN=0 TO.999/SH
2590 HO=N*SH:GOSUB620:NEXTN
2600 HO=SH*LI
2610 FORN=0 TO.999/SV
2620 VE=N*SV:GOSUB620:NEXTN:CN=0
2630 REM---1e lijn---
2640 HO=SH*(LI+X1):VE=RR+SV*(BO-Y1):GOSUB620
2650 HO=SH*(LI+X2):VE=RR+SV*(BO-Y2):GOSUB630
2660 REM---2e lijn---
2670 HO=SH*(LI+X3):VE=RR+SV*(BO-Y3):GOSUB620
2680 HO=SH*(LI+X4):VE=RR+SV*(BO-Y4):GOSUB630
2690 HO=.02:VE=.02:GOSUB110
2700 SR$=F1$:GOSUB650
2710 VE=.06:GOSUB110
2720 SR$=F2$:GOSUB650
2730 VE=.1:GOSUB110
2740 SR$=SN$:GOSUB650
2750 HO=.82:VE=.95:GOSUB110
2760 SR$="Taste>":GOSUB650
2770 GOSUB210
2780 GOTO1060
3000 REM
3010 REM---subr. lijnvergelijking---
3020 C=0
3030 IFXA<>XB THEN3090
3040 REM---lijn vertikaal---
3050 A=999999:C=1:PRINT" X =";XA
3060 SR=XA:GOSUB300
3070 F$=" X = "+SR$:RETURN
3080 REM---lijn niet vertikaal---
3090 F$=" Y = ":P=YA-YB:Q=XA-XB
3100 XZ=P:YZ=Q:GOSUB4540:IFZZ$="1" THENZZ$=""
3110 IFZZ$="-1" THENZZ$="-"
3120 IFZZ$<>"?" THENF$=F$+ZZ$
3130 A=P/Q
3140 B=YA-A*XA
3150 XZ=XB*YA-XA*YB:YZ=XB-XA:GOSUB4540:B$=ZZ$
3160 IFA=0 THEN3190:REM---horizontaal-->
3170 F$=F$+" X ":IFB=0 THEN3200
3180 IFB>0 THENF$=F$+" +"
3190 F$=F$+B$
3200 PRINTF$
3210 RETURN
3500 REM
3510 REM---subr.snijpunt---
3520 SN$="kein Schnittpunkt"
3530 IF(C1=1)AND(C2=1)THENPRINTSN$:RETURN
3540 IFA1=A2 THENPRINTSN$:RETURN
3550 SN$=""
3560 IFC1=1 THEN3590
3570 IFC2=1 THEN3620
3580 GOTO3650
3590 XS=X1:YS=A2*XS+B2
3600 SR=XS:GOSUB300:XS$=SR$
3610 SR=YS:GOSUB300:YS$=SR$:GOTO3710
3620 XS=X3:YS=A1*XS+B1
3630 SR=XS:GOSUB300:XS$=SR$
3640 SR=YS:GOSUB300:YS$=SR$:GOTO3710
3650 XS=-(B1-B2)/(A1-A2)
3660 SR=XS:GOSUB300:XS$=SR$
3670 IFLEN(XS$)>6 THENXS$=LEFT$(XS$,6)
3680 YS=(A1*B2-A2*B1)/(A1-A2)
3690 SR=YS:GOSUB300:YS$=SR$
3700 IFLEN(YS$)>6 THENYS$=LEFT$(YS$,6)
3710 SN$=" ("+XS$+","+YS$+")"
3720 PRINT"Schnittpunkt in";SN$
3730 RETURN
4000 REM
4010 REM---snijpunt op de lijnstukken?---
4020 SN=0:IF(C1=1)AND(C2=1)THENRETURN
4030 IFA1=A2 THENRETURN
4040 IF(XS<X1)AND(XS<X2)THENRETURN
4050 IF(XS>X1)AND(XS>X2)THENRETURN
4060 IF(XS<X3)AND(XS<X4)THENRETURN
4070 IF(XS>X3)AND(XS>X4)THENRETURN
4080 SN=1:RETURN
4500 REM
4510 REM---breuken -- maakt breuk XZ/YZ
4520 REM---input XZ,YZ -> output ZZ$ ---
4530 REM F() bewaart de factoren bij ontbinding
4540 UZ=1:ZZ$="":IFXZ/YZ<0 THENZZ$="-"
4550 XZ=INT(ABS(XZ)):IFXZ=0 THENZZ$="?":RETURN
4560 YZ=INT(ABS(YZ)):IFYZ=0 THENZZ$="?":RETURN
4570 REM--- heel getal afsplitsen? ---
4580 HL=0:HL$="":AZ=XZ:BZ=YZ
4590 IFXZ>=YZ THENXZ=XZ-YZ:HL=HL+1:GOTO4590
4600 IFHL>0 THENSR=HL:GOSUB300:HL$=SR$
4610 BR=XZ/YZ:IFBR>0 THEN4640
4620 IFHL>0 THENZZ$=ZZ$+HL$:REM alleen helen
4630 RETURN
4640 SR=XZ:GOSUB300:XZ$=SR$
4650 SR=YZ:GOSUB300:YZ$=SR$
4660 EZ=XZ:GOSUB5020:TZ=UZ
4670 EZ=YZ:GOSUB5020
4680 GOSUB6020
4690 ZZ$=ZZ$+HL$+" "+XZ$+"/"+YZ$
4700 RETURN
5000 REM
5010 REM --- ontbind in factoren ( opslaan in F() )--
5020 IFEZ=1 THENRETURN
5030 IFEZ=2 THENF(UZ)=2:UZ=UZ+1:RETURN
5040 VZ=1:DZ=2:PZ=SQR(EZ)
5050 GOSUB5510
5060 IFDZ=2 THENDZ=3:GOTO5080
5070 DZ=DZ+2
5080 IFDZ<=PZ THEN5050
5090 IFEZ>1 THENF(UZ)=EZ:UZ=UZ+1
5100 RETURN
5500 REM---subroutine---
5510 PZ=EZ/DZ:IFPZ<>INT(PZ)THENRETURN
5520 VZ=0:F(UZ)=DZ:UZ=UZ+1
5530 EZ=INT(EZ/DZ):PZ=SQR(EZ)
5540 GOTO5510
6000 REM
6010 REM --- vereenvoudigen (gelijke factoren =1 maken) --
6020 IFTZ=1 THEN6100
6030 FORNZ=1 TOTZ-1
6040 MZ=TZ
6050 IFF(NZ)=F(MZ)THENF(MZ)=1:F(NZ)=1
6060 MZ=MZ+1:IFMZ<UZ THEN6050
6070 NEXTNZ
6080 XZ=1:FORNZ=1 TOTZ-1:XZ=XZ*F(NZ):NEXTNZ
6090 YZ=1:FORNZ=TZ TOUZ-1:YZ=YZ*F(NZ):NEXTNZ
6100 IFYZ=BZ THENRETURN
6110 SR=XZ:GOSUB300:XZ$=SR$
6120 SR=YZ:GOSUB300:YZ$=SR$
6130 RETURN
30000 REM----------------------------
30010 REM MSX computer
30020 REM----------------------------
32000 REM Ch.W.Brederode
32010 REM Von Bonninghausenlaan 33
32020 REM 2161 ES LISSE
32030 REM
32040 REM TROS-RADIO dd 891122
32050 REM DS-KULTUR, REM-spezial 911002