|
1 COMMENT 2 3 @section Synopsis 4 5 Plot a part of the Mandelbrot set. 6 7 Plot (part of) the Mandelbrot set, that are points z[0] in the complex plane 8 for which the sequence z[n+1] := z[n] ** 2 + z[0] (n >= 0) is bounded. 9 10 This program requires a68g to be built with the GNU plotutils library. 11 12 COMMENT 13 14 PRAGMAT need plotutils PRAGMAT 15 16 INT pix = 300, max iter = 256, REAL zoom = 0.33 / pix; 17 [-pix : pix, -pix : pix] INT plane; 18 COMPL ctr = 0.05 I 0.75 # center of set #; 19 20 # Compute the length of an orbit. # 21 22 PROC iterate = (COMPL z0) INT: 23 BEGIN COMPL z := z0, INT iter := 1; 24 WHILE (iter +:= 1) < max iter # not converged # AND ABS z < 2 # not diverged # 25 DO z := z * z + z0 26 OD; 27 iter 28 END; 29 30 # Compute set and find maximum orbit length. # 31 32 INT max col := 0; 33 FOR x FROM -pix TO pix 34 DO FOR y FROM -pix TO pix 35 DO COMPL z0 = ctr + (x * zoom) I (y * zoom); 36 IF (plane [x, y] := iterate (z0)) < max iter 37 THEN (plane [x, y] > max col | max col := plane [x, y]) 38 FI 39 OD 40 OD; 41 42 # Make a plot. # 43 44 FILE plot; 45 INT num pix = 2 * pix + 1; 46 open (plot, "mandelbrot.png", stand draw channel); 47 make device (plot, "png", whole (num pix, 0) + "x" + whole (num pix, 0)); 48 FOR x FROM -pix TO pix 49 DO FOR y FROM -pix TO pix 50 DO INT col = (plane [x, y] > max col | max col | plane [x, y]); 51 REAL c = sqrt (1- col / max col); # sqrt to enhance contrast # 52 draw colour (plot, c, c, c); 53 draw point (plot, (x + pix) / (num pix - 1), (y + pix) / (num pix - 1)) 54 OD 55 OD; 56 close (plot)
© 2002-2024 J.M. van der Veer (jmvdveer@xs4all.nl)
|