'PYTA.BAS SCREEN 13, 15 INPUT "Depth? (1-13) ", Diepte IF Diepte < 1 THEN RUN IF Diepte > 13 THEN RUN CLS DIM maxel(20), maxelxl(20), maxelxr(20), maxelxm(20) DIM maxelyl(20), maxelyr(20), maxelym(20) R = 0: REM r (rij =0) REM: posities van de wortel: maxelxl(R) = 272: maxelxm(R) = 368 maxelyl(R) = 430: maxelym(R) = 430 REM REM: start doorlopen GOSUB links FOR i = 1 TO 10000 GOSUB boven NEXT i Key$ = INPUT$(1) END links: REM doorloop linkertakken en ga 1 naar rechts curr = R + 1 FOR R = curr TO Diepte maxel(R) = maxel(R) + 1: tak$ = "links": GOSUB teken NEXT R REM: Ga na de linkertakken 1 maal naar rechts. R = R - 1: GOSUB rechts1 RETURN rechts1: REM ga naar de rechter tak en doorloop de linker takken to max. diepte maxel(R) = maxel(R) + 1: tak$ = "rechts": GOSUB teken IF R <> Diepte THEN GOSUB links RETURN boven: REM ga 1 stap naar boven en naar rechts als vorige niet 1/2 van volgende GOSUB vorige IF sw1 = 1 AND sw2 = 0 THEN GOSUB rechts1 IF sw1 = 1 AND sw2 = 1 THEN GOSUB boven RETURN vorige: REM ga naar vorige rij sw1 = 0: sw2 = 0: R = R - 1 IF R = 1 THEN a$ = INPUT$(1): END IF maxel(R + 1) = 2 * maxel(R) THEN sw1 = 1 IF maxel(R) = 2 * maxel(R - 1) THEN sw2 = 1 RETURN teken: REM bereken de punten, teken de figuur en bewaar linker en rechter element. IF tak$ = "links" THEN GOSUB haalbasisl IF tak$ = "rechts" THEN GOSUB haalbasisr GOSUB bepricht ON richt GOSUB richt1, richt2, richt3, richt4, richt5, richt6, richt7, richt8 GOSUB slacordop GOTO spr1 IF tak$ = "rechts" THEN GOSUB printcord spr1: GOSUB tekenfig GOTO spr2 IF tak$ = "rechts" THEN INPUT a$ spr2: RETURN haalbasisl: REM Haal posities van basislijn X1 = maxelxl(R - 1): Y1 = maxelyl(R - 1) X2 = maxelxm(R - 1): Y2 = maxelym(R - 1) RETURN haalbasisr: REM Haal posities van basislijn X1 = maxelxm(R - 1): Y1 = maxelym(R - 1) X2 = maxelxr(R - 1): Y2 = maxelyr(R - 1) RETURN bepricht: REM Bepaal de richting van de tak. IF X1 < X2 AND Y1 = Y2 THEN richt = 1 IF X1 < X2 AND Y1 > Y2 THEN richt = 2 IF X1 = X2 AND Y1 > Y2 THEN richt = 3 IF X1 > X2 AND Y1 > Y2 THEN richt = 4 IF X1 > X2 AND Y1 = Y2 THEN richt = 5 IF X1 > X2 AND Y1 < Y2 THEN richt = 6 IF X1 = X2 AND Y1 < Y2 THEN richt = 7 IF X1 < X2 AND Y1 < Y2 THEN richt = 8 RETURN richt1: REM richting Noord X3 = X2: Y3 = Y2 - (X2 - X1) X4 = X1: Y4 = Y3 XM = INT((X3 + X4) / 2): YM = Y3 - INT((X3 - X4) / 2) RETURN richt2: REM richting Noord - West X3 = X1: Y3 = Y2 - (Y1 - Y2) X4 = X1 - (X2 - X1): Y4 = Y2 XM = X4: YM = Y3 RETURN richt3: REM richting West X3 = X2 - (Y1 - Y2): X4 = X3 Y3 = Y2: Y4 = Y1 XM = X4 - INT((Y4 - Y3) / 2): YM = INT((Y4 + Y3) / 2) RETURN richt4: REM richting Zuid-West X3 = X2 - (X1 - X2): X4 = X2 Y3 = Y1: Y4 = Y1 + (Y3 - Y2) XM = X3: YM = Y4 RETURN richt5: REM richting Zuid X3 = X2: X4 = X1 Y3 = Y2 + (X1 - X2): Y4 = Y3 XM = INT((X3 + X4) / 2): YM = Y3 + INT((X4 - X3) / 2) RETURN richt6: REM richting Zuid - Oost X3 = X1: X4 = X1 + (X1 - X2) Y3 = Y2 + (X1 - X2): Y4 = Y2 XM = X4: YM = Y3 RETURN richt7: REM richting Oost X3 = X2 + (Y2 - Y1): Y3 = Y2 X4 = X3: Y4 = Y1 YM = Y4 + INT((Y3 - Y4) / 2): XM = X3 + (YM - Y4) RETURN richt8: REM richting Noord-Oost X3 = X2 + (X2 - X1): Y3 = Y1 X4 = X2: Y4 = Y1 - (Y2 - Y1) XM = X3: YM = Y4 RETURN RETURN slacordop: REM Sla de berekende coordinaten op maxelxl(R) = X4: maxelyl(R) = Y4 maxelxm(R) = XM: maxelym(R) = YM maxelxr(R) = X3: maxelyr(R) = Y3 RETURN tekenfig: REM verbind x1y1,x2y2,x3y3,x4y4 en xmym met elkaar CLR = R + 40 X1 = X1 / 2.5 X2 = X2 / 2.5 X3 = X3 / 2.5 X4 = X4 / 2.5 Y1 = Y1 / 2.5 Y2 = Y2 / 2.5 Y3 = Y3 / 2.5 Y4 = Y4 / 2.5 XM = XM / 2.5 YM = YM / 2.5 LINE (X1, Y1)-(X2, Y2), CLR LINE (X2, Y2)-(X3, Y3), CLR LINE (X3, Y3)-(X4, Y4), CLR LINE (X4, Y4)-(X1, Y1), CLR LINE (X3, Y3)-(XM, YM), CLR LINE (X4, Y4)-(XM, YM), CLR PAINT ((X4 + X2) / 2, (Y1 + Y3) / 2), CLR xp = (X4 + X3) / 2 xp = (XM + xp) / 2 yp = (Y4 + Y3) / 2 yp = (YM + yp) / 2 PAINT (xp, yp), CLR LINE (X1, Y1)-(X2, Y2), 0 LINE (X2, Y2)-(X3, Y3), 0 LINE (X3, Y3)-(X4, Y4), 0 LINE (X4, Y4)-(X1, Y1), 0 LINE (X3, Y3)-(XM, YM), 0 LINE (X4, Y4)-(XM, YM), 0 X1 = X1 * 2.5 X2 = X2 * 2.5 X3 = X3 * 2.5 X4 = X4 * 2.5 Y1 = Y1 * 2.5 Y2 = Y2 * 2.5 Y3 = Y3 * 2.5 Y4 = Y4 * 2.5 XM = XM * 2.5 YM = YM * 2.5 RETURN printcord: REM print coordinaten PRINT "rij = "; R; " element = "; maxel(R) PRINT "x4,y4 = "; maxelxl(R), maxelyl(R) PRINT "xm,ym = "; maxelxm(R), maxelym(R) PRINT "x3,y3 = "; maxelxr(R), maxelyr(R) RETURN