Alan Richmond

Naive Mandelbrot Set

This is your basic Mandelbrot Set plotter. Very little effort made to speed it up, except for plotting top & bottom pixels together as they’re mirrored across the x-axis. Later I’ll show you some much faster programs!

The heart of this program is the iteration of z2+c where c is a point in the complex plane and z is initially complex 0. c is a member of the Mandelbrot Set if z remains bounded forever. In practice only a finite number of iterations is made, after which we assume the point is in the set. Also, it’s known that if z’s magnitude exceeds 2, then it will eventually escape.

It was originally written for Pygame, which I then found wasn’t set up for Python 3 on my computer. Converting it to Pillow was an easier option than dealing with the lengthy instructions I Googled for upgrading my Pygame (I’ll get around to it later…). I’ve left in the Pygame instructions as comments in case you want to go that way 🙂

#   Python+Pillow/Pygame program to illustrate computing the Mandelbrot Set.
#   Note that it's far from efficient; it can easily be sped up!
#   Authour: Alan Richmond, Python3.codes

#import pygame                                       # see pygame.org
from PIL import Image
width, height = 1000,1000                           # display window size
#screen = pygame.display.set_mode((width, height))   # initialise pygame window
img=Image.new("RGB",(width,height))
xaxis = width / 1.5 + 140                           # scaling for x & y axes
yaxis = height / 2
scale = 400
maxit = 99                                          # maximum iterations
for iy in range(int(height/2)+1):                   # scan y-axis
    for ix in range(width):                         # scan x-axis
        z = 0 + 0j                                  # initialise z=0
                                                    # map pixel position to complex plane
        c = complex(float(ix - xaxis) / scale, float(iy - yaxis) / scale)

        for it in range(maxit):                     # up to maximum iterations:
            z = z*z + c                             # iterate z^2 + c
            if abs(z) > 2:                          # z is flying off to infinity!
                col=(it % 4 * 64, it % 8 * 32, it % 16 * 16)    # pick a colour
                break                               # break out of closest loop
        else:                                       # loop finished so
            col = (0, 0, 0)                         # point is in set = colour black

#        screen.set_at((ix, iy), col)                # set colour on top half
#        screen.set_at((ix, height-iy), col)         # set colour on bottom half
        img.putpixel((ix,iy),col)
        img.putpixel((ix,height-iy-1),col)
#    pygame.display.update()                         # update window on screen
#raw_input("Done")                                   # picture disappears when Enter
img.save("Mandelbrot.png", "PNG")

Leave a Reply

Your e-mail address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.