'************************ '*** MANDELBR.BAS *** ' Thorsten Guenther, aguenthe@abo.mainz-online.de ' aguenthe@mainz-online.de '************************ '==== Init: '==== SHARED x_Anfang,x_Ende,y_Anfang SHARED Max_Zyklen% SHARED MaxX%,MaxY% SHARED dx,dy SHARED a,b,i%,j%,x,y SHARED Betrag Max_Zyklen%=32 MaxX%=640 MaxY%=480 '==== Main: '==== SCREEN 12 CALL Eingabe CALL Ausschnitt CALL Mandelbrot BEEP END '********** SUB Eingabe '********** INPUT "X-Start (try -2.25)";x_Anfang INPUT "X-Stop (try 0.75)";x_Ende INPUT "Y-Start (try -1.15) ";y_Anfang LOCATE 30,67 PRINT "Please wait..."; END SUB '************* SUB Ausschnitt '************* x_Ausschnitt=x_Ende-x_Anfang y_Ende=x_Ausschnitt*(MaxY%/MaxX%)+y_Anfang dy=(y_Ende-y_Anfang)/(MaxY%+1) dx=(x_Ausschnitt/(MaxX%+1)) END SUB '************************************* SUB Iterieren (x,y,a,b,Betrag,Zyklen%) '************************************* aa=(a*a-b*b)+x bb=2*a*b+y incr Zyklen% Betrag=aa*aa+bb*bb a=aa b=bb END SUB '************************** SUB Faerben (i%,j%,Zyklen%) '************************** SELECT CASE Zyklen% CASE 0,1 pset(i%,j%),7 CASE 2 pset(i%,j%),8 CASE 3,4 pset (i%,j%),1 CASE 5,6,7 pset (i%,j%),9 CASE 8,9,10,11 pset (i%,j%),4 CASE 12,13,14,15,16 pset (i%,j%),12 CASE 17,18,19,20,21,22 pset (i%,j%),14 CASE 23,24,25,26,27,28,29,30,31 pset (i%,j%),15 CASE ELSE pset (i%,j%),7 END SELECT END SUB '*************************** SUB Spalte_Berechnen (i%,j%) '*************************** y=y_Anfang+j%*dy a=0 b=0 Zyklen%=0 DO CALL Iterieren (x,y,a,b,Betrag,Zyklen%) LOOP UNTIL (Betrag>=4) OR (Zyklen%>Max_Zyklen%) CALL Faerben (i%,j%,Zyklen%) incr j% END SUB '************* SUB Mandelbrot '************* FOR i%=0 TO MaxX% x=x_Anfang+i%*dx j%=0 DO WHILE (j%<=MaxY%) AND (NOT INSTAT) CALL Spalte_Berechnen (i%,j%) LOOP NEXT END SUB