25 Years of Programming
An open source source for C, C++, OWL, BASIC, MDB, XLS, DOT, and more...
Home   Projects   Up   Sitemap   Search   Blog   Forum+Chat   About Us   Privacy   Terms of Use   Feedback   FAQ   Images   Services   Payments   Humor   Music

Random Walk "Chaos Game" program draws fractal shapes in GWBASIC, BASICA

If a graphic point wanders around the display screen leaving a trail of where it's been (a "random walk"), it draws fractal shapes. The three variations below were mainly experiments to see what sorts of shapes could be drawn.

These were probably inspired by a description of the "chaos game" in James Gleick's book, Chaos, but I'm not sure they actually use the methods described or even capture what the Chaos Game really is, as conceived by Michael Barnsley. If they don't, they should be easily modifiable to do so. 

10 'CHAOSGAM.BAS 3-26-90 PLAYS THE CHAOS GAME BY CREATING FRACTAL SHAPES.
11 'COPYRIGHT (C)1990 STEVEN WHITNEY.
12 'Initially published by http://25yearsofprogramming.com.
13 'Published under GNU GPL (General Public License) Version 3, with ABSOLUTELY NO WARRANTY.
17 'USES A RANDOM WALK TO GENERATE AREAS WITH FRACTAL BOUNDARIES.
18 'I THINK MICHAEL BARNSLEY COINED THE PHRASE CHAOS GAME.
19 'QUIT WITH CTRL-C OR CTRL-BREAK
20 CLS
30 RNDM = TIMER / 3
40 RANDOMIZE
45 'SCREEN 12 : 'ENABLE FOR IBM BASIC
50 CLS
60 WINDOW (-319, -112)-(320, 111)
70 X = 0: Y = 0
80 INCR = 1
90 YINCR = INCR * 224 / 639
110 'LOOP ENTRY POINT
120 	COLOUR = 4
130 	PSET (X, Y), COLOUR
140 	M = INT(RND * 8)
160 	IF M = 0 THEN Y = Y + YINCR
170 	IF M = 1 THEN Y = Y - YINCR
180 	IF M = 2 THEN X = X + INCR
190 	IF M = 3 THEN X = X - INCR
191 	IF M = 4 THEN X = X + INCR: Y = Y + YINCR
192 	IF M = 5 THEN X = X + INCR: Y = Y - YINCR
193 	IF M = 6 THEN X = X - INCR: Y = Y + YINCR
194 	IF M = 7 THEN X = X - INCR: Y = Y - YINCR
200 	IF ABS(Y) >= 111 OR ABS(X) >= 319 THEN 220
210 GOTO 110
220 LOCATE 1, 1: PRINT RNDM: BEEP: BEEP: BEEP: BEEP: BEEP: END



These variations were mainly for experimenting with the parameters.

10 'DONUT.BAS 3-27-90 
11 'COPYRIGHT (C)1990 STEVEN WHITNEY.
12 'Initially published by http://25yearsofprogramming.com.
13 'Published under GNU GPL (General Public License) Version 3, with ABSOLUTELY NO WARRANTY.
14 'ANOTHER CHAOS GAME, POLAR COORDINATES, MAKES A DONUT SHAPE.
15 'QUIT WITH CTRL-C OR CTRL-BREAK
16 'SCREEN 12 : 'ENABLE FOR IBM BASICA
20 PI = 3.1415926#
30 'CONVERT FROM RECTANGULAR TO POLAR
40 'GET DISTANCE
50 DEF FNA (X, Y) = SQR(X * X + Y * Y)
60 'GET THETA
70 DEF FNB (X, Y) = ATN(Y / X)
80 'CONVERT FROM POLAR TO RECTANGULAR
90 'GET X
100 DEF FNC (D, THETA) = D * COS(THETA)
110 'GET Y
120 DEF FND (D, THETA) = D * SIN(THETA)
130 CLS
140 RANDOMIZE
150 CLS
160 WINDOW (-300, -300)-(300, 300)
170 D = 0
180 THETA = .1
190 COLOUR = 4
200 'LOOP ENTRY POINT
210 	PSET (FNC(D, THETA), FND(D, THETA)), COLOUR
220 	M = INT(RND * 2)
230 	IF M = 0 THEN THETA = THETA + .25: D = D + 10
240 	IF M = 1 THEN D = D * .9: THETA = THETA - .4
250 GOTO 200



10 'POLARCHA.BAS 3-27-90 
11 'COPYRIGHT (C)1990 STEVEN WHITNEY.
12 'Initially published by http://25yearsofprogramming.com.
13 'Published under GNU GPL (General Public License) Version 3, with ABSOLUTELY NO WARRANTY.
14 'CHAOS GAME USING POLAR COORDINATES
15 'QUIT WITH CONTROL-C OR CONTROL-BREAK.
16 'SCREEN 12 : 'ENABLE FOR IBM BASICA
20 'CONVERT FROM RECTANGULAR TO POLAR
30 'GET DISTANCE
40 DEF FNA (X, Y) = SQR(X * X + Y * Y)
50 'GET THETA
60 DEF FNB (X, Y) = ATN(Y / X)
70 'CONVERT FROM POLAR TO RECTANGULAR
71 'GET X
72 DEF FNC (D, THETA) = D * COS(THETA)
73 'GET Y
74 DEF FND (D, THETA) = D * SIN(THETA)
80 CLS
90 RNDM = TIMER / 3
100 RANDOMIZE
110 CLS
120 WINDOW (-319, -239)-(320, 239)
130 D = 20
131 THETA = .39
150 YINCR = INCR * 479 / 639
160 'LOOP ENTRY POINT
170 	COLOUR = 4
180 	PSET (FNC(D, THETA), FND(D, THETA)), COLOUR
190 	M = INT(RND * 2)
200 	IF M = 0 THEN THETA = THETA + .1: D = D + 10
210 	IF M = 1 THEN D = D / 2
290 GOTO 160
300 LOCATE 1, 1: PRINT RNDM: BEEP: BEEP: BEEP: BEEP: BEEP: END

 


 

Valid HTML 4.01 Transitional Valid CSS
Yahoo! Search
Search the web Search this site
View content labeling at ICRA.