Fractals in SuperBasic
Posted: Sun Jul 31, 2016 4:11 pm
The following code has been adapted for a standard QL. The original program appeared in an article by Michael Barnsley and Alan Sloan in Byte Magazine, back in January 1988. It can generate a number of different fractal shapes, including a fern and Sierpinski triangle. Lines 120 to 160 control the shape that will be produced. Current data will generate a fern.
10 REMark Based on Barnsley, F., and Sloan, A.D.
20 REMark A Better Way to Compress Images
30 REMark BYTE Magazine, Jan 1988, pp 215-222
40 REMark Adapted for Sinclair QL
50 REMark by Ioannis Kapageridis, March 1988
100 INPUT "ENTER NUMBER OF ITERATIONS:";NI
110 DIM A(4),B(4),C(4),D(4),E(4),F(4),P(4)
120 DATA 4
130 DATA .85,4E-2,-4E-2,.85,0,1.6,.85
140 DATA -.15,.28,.26,.24,0,.44,7E-2
150 DATA .2,-.26,.23,.22,0,1.6,7E-2
160 DATA 0,0,0,.16,0,0,1E-2
170 READ M
180 PT=0
190 FOR J=1 TO M
200 READ A(J),B(J),C(J),D(J),E(J),F(J),PK
210 PT=PT+PK
220 P(J)=PT
230 NEXT J
240 MODE 4:WINDOW 512,256,0,0:SCALE 256,0,0:PAPER 0:CLS
250 XSCALE=30
260 YSCALE=20
270 XOFFSET=184
280 YOFFSET=20
290 X=0
300 Y=0
310 FOR N=1 TO NI
320 PK=RND
330 IF PK<=P(1) THEN K=1:ELSE :IF PK<=P(2) THEN K=2:ELSE :IF PK<=P(3) THEN K=3:ELSE :K=4
340 NEWX=A(K)*X+B(K)*Y+E(K)
350 NEWY=C(K)*X+D(K)*Y+F(K)
360 X=NEWX
370 Y=NEWY
380 IF N>10 THEN POINT X*XSCALE+XOFFSET,Y*YSCALE+YOFFSET
390 NEXT N
400 PRINT"PRESS ANY KEY TO END.":PAUSE:CLEAR
An example of the produced image can be seen here:
https://1drv.ms/i/s!ArbzNSRfylKKiyjZhQpmJJub9ZMK
10 REMark Based on Barnsley, F., and Sloan, A.D.
20 REMark A Better Way to Compress Images
30 REMark BYTE Magazine, Jan 1988, pp 215-222
40 REMark Adapted for Sinclair QL
50 REMark by Ioannis Kapageridis, March 1988
100 INPUT "ENTER NUMBER OF ITERATIONS:";NI
110 DIM A(4),B(4),C(4),D(4),E(4),F(4),P(4)
120 DATA 4
130 DATA .85,4E-2,-4E-2,.85,0,1.6,.85
140 DATA -.15,.28,.26,.24,0,.44,7E-2
150 DATA .2,-.26,.23,.22,0,1.6,7E-2
160 DATA 0,0,0,.16,0,0,1E-2
170 READ M
180 PT=0
190 FOR J=1 TO M
200 READ A(J),B(J),C(J),D(J),E(J),F(J),PK
210 PT=PT+PK
220 P(J)=PT
230 NEXT J
240 MODE 4:WINDOW 512,256,0,0:SCALE 256,0,0:PAPER 0:CLS
250 XSCALE=30
260 YSCALE=20
270 XOFFSET=184
280 YOFFSET=20
290 X=0
300 Y=0
310 FOR N=1 TO NI
320 PK=RND
330 IF PK<=P(1) THEN K=1:ELSE :IF PK<=P(2) THEN K=2:ELSE :IF PK<=P(3) THEN K=3:ELSE :K=4
340 NEWX=A(K)*X+B(K)*Y+E(K)
350 NEWY=C(K)*X+D(K)*Y+F(K)
360 X=NEWX
370 Y=NEWY
380 IF N>10 THEN POINT X*XSCALE+XOFFSET,Y*YSCALE+YOFFSET
390 NEXT N
400 PRINT"PRESS ANY KEY TO END.":PAUSE:CLEAR
An example of the produced image can be seen here:
https://1drv.ms/i/s!ArbzNSRfylKKiyjZhQpmJJub9ZMK