Welcome, guest | Sign In | My Account | Store | Cart

It generates a fractal from any given IFS definition (Fractint style).

Python, 78 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78``` ```# IFS fractals # FB - 201003221 from PIL import Image import random ### Fractint IFS definition of Fern ##mat=[[0.0,0.0,0.0,0.16,0.0,0.0,0.01], ## [0.85,0.04,-0.04,0.85,0.0,1.6,0.85], ## [0.2,-0.26,0.23,0.22,0.0,1.6,0.07], ## [-0.15,0.28,0.26,0.24,0.0,0.44,0.07]] ### Fractint IFS definition of Dragon ##mat = [[0.824074, 0.281482, -0.212346, 0.864198, -1.882290, -0.110607, 0.787473], ## [0.088272, 0.520988, -0.463889, -0.377778, 0.785360, 8.095795, 0.212527]] ### Levy C curve ##mat = [[0.5, -0.5, 0.5, 0.5, 0.0, 0.0, 0.5], ## [0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5]] # Levy Dragon mat = [[0.5, -0.5, 0.5, 0.5, 0.0, 0.0, 0.5], [-0.5, -0.5, 0.5, -0.5, 1.0, 0.0, 0.5]] # image size imgx = 512 imgy = 512 # will be auto-re-adjusted m = len(mat) # find the xmin, xmax, ymin, ymax x = mat[0][4] y = mat[0][5] # xa = x xb = x ya = y yb = y # for k in range(imgx * imgy): p=random.random() psum = 0.0 for i in range(m): psum += mat[i][6] if p <= psum: break x0 = x * mat[i][0] + y * mat[i][1] + mat[i][4] y = x * mat[i][2] + y * mat[i][3] + mat[i][5] x = x0 # if x < xa: xa = x if x > xb: xb = x if y < ya: ya = y if y > yb: yb = y # drawing imgy = round(imgy * (yb - ya) / (xb - xa)) # auto-re-adjust the aspect ratio image = Image.new("L", (imgx, imgy)) x=0.0 y=0.0 for k in range(imgx * imgy): p=random.random() psum = 0.0 for i in range(m): psum += mat[i][6] if p <= psum: break x0 = x * mat[i][0] + y * mat[i][1] + mat[i][4] y = x * mat[i][2] + y * mat[i][3] + mat[i][5] x = x0 jx = int((x - xa) / (xb - xa) * (imgx - 1)) jy = (imgy - 1) - int((y - ya) / (yb - ya) * (imgy - 1)) image.putpixel((jx, jy), 255) image.save("IFS_.png", "PNG") ```

Michael Fogleman 14 years, 1 month ago

I tested it out with the Fern and the Dragon. Looks nice!

FB36 (author) 14 years, 1 month ago

If anyone interested, download an old (DOS/Win) version of Fractint zip file from http://spanky.triumf.ca/www/fractint/getting.html, extract the fractint.ifs file from it to get many more IFS fractal definitions (which easily can be converted to draw w/ this code).

 Created by FB36 on Sun, 21 Mar 2010 (MIT)