Mandelbrot Set in Python & Pygame
This is a simple Python program to display the whole Mandelbrot set. Well, not every point from the infinite set, just a few corresponding to pixels…
The Mandelbrot set is a mathematical set of points whose boundary is a distinctive and easily recognizable two-dimensional fractal shape. The set is closely related to Julia sets (which include similarly complex shapes), and is named after the mathematician Benoit Mandelbrot, who studied and popularized it.
Mandelbrot set images are made by sampling complex numbers and determining for each whether the result tends towards infinity when a particular mathematical operation is iterated on it. Treating the real and imaginary parts of each number as image coordinates, pixels are colored according to how rapidly the sequence diverges, if at all.
The Mandelbrot Set is a mathematical fractal defined by the recursive formula z = z^2 + c, where z and c are complex numbers.
Mandelbrot Set in Python:
- lower half is a reflection of the upper half;
- the large cardioid and period 2 bulb can be omitted from further tests
__author__ = 'Alan Richmond' ''' Mandelbrot.py Copyright (C) 2014 Alan Richmond (Tuxar.uk) Full mandelbrot set with a couple of optimizations: 1 compute only top half, mirror it. 2 don't compute set inside the big circle and a couple of smaller ones. See http://en.wikipedia.org/wiki/Mandelbrot_set#Cardioid_.2F_bulb_checking ''' from pygame.locals import * import pygame def main(): width, height = 1000,1000 screen = pygame.display.set_mode((width,height),DOUBLEBUF) xaxis = width/1.5+140 yaxis = height/2 scale = 400 iterations = 50 for iy in range(height/2+1): for ix in range(width): z = 0+0j c = complex(float(ix-xaxis)/scale, float(iy-yaxis)/scale) x=c.real y=c.imag y2=y*y q=(x-0.25)**2+y2 if not(q*(q+(x-0.25))<y2/4.0 or (x+1.0)**2 + y2 <0.0625): for i in range(iterations): z = z**2+c if abs(z) > 2: v = 765*i/iterations if v > 510: color = (255, 255, v%255) elif v > 255: color = (255, v%255, 0) else: color = (v%255, 0, 0) break else: color = (0, 0, 0) screen.set_at((ix, iy), color) screen.set_at((ix, height-iy), color) pygame.display.update() while True: event = pygame.event.poll() if (event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE)): break if __name__ == "__main__": main()
[welcomewikilite wikiurl=”http://en.wikipedia.org/wiki/Mandelbrot_set” sections=”Cardioid / bulb checking” settings=””]