import numpy as np
from pylab import imshow, show
import math
from timeit import default_timer as timer
def fractal(x, y, max_iters):
"""
Given the real and imaginary parts of a complex number,
determine if it is a candidate for membership in the fractal
set given a fixed number of iterations.
"""
c = complex(x, y)
cL = abs(c)
try:
t2 = complex(cL, 10.0)
except OverflowError, err:
return max_iters
try:
t3 = pow(complex(-100.0, -2.0 * cL), c)
except OverflowError, err:
return max_iters
try:
t4 = complex(0.0, cL)
except OverflowError, err:
return max_iters
try:
t5 = complex(-200.0, -cL) * c
except OverflowError, err:
return max_iters
z = 0.0j
for i in range(max_iters):
try:
t1 = complex(cL, -10.0) + z
except OverflowError, err:
return max_iters
try:
T1 = pow(t1, t2)
except OverflowError, err:
return max_iters
try:
T2 = T1 + t3
except OverflowError, err:
return max_iters
try:
T3 = T2 + t5
except OverflowError, err:
return max_iters
try:
T4 = pow(T3, t4)
except OverflowError, err:
return max_iters
z = T4
if (z.real*z.real + z.imag*z.imag) >= 400000.0:
return i
return max_iters
def create_fractal(min_x, max_x, min_y, max_y, image, iters):
height = image.shape[0]
width = image.shape[1]
pixel_size_x = (max_x - min_x) / width
pixel_size_y = (max_y - min_y) / height
for x in range(width):
real = min_x + x * pixel_size_x
for y in range(height):
imag = min_y + y * pixel_size_y
escape_num = fractal(real, imag, iters)
if (escape_num == iters):
image[y, x] = 255
else:
image[y, x] = 0
image = np.zeros((1080, 1920, 3), dtype = np.uint8)
start = timer()
create_fractal(-228.24, 228.24, -120.96, 120.96, image, 50)
dt = timer() - start
print "Fractal generated in %f s" % dt
imshow(image, origin='lower', extent=(-228.24, 228.24, -120.96, 120.96))
show()
image = np.zeros((1080, 1920, 3), dtype = np.uint8)
start = timer()
create_fractal(-19.20, 19.20, -10.80, 10.80, image, 50)
dt = timer() - start
print "Fractal generated in %f s" % dt
imshow(image, origin='lower', extent=(-19.20, 19.20, -10.80, 10.80))
show()
image = np.zeros((1080, 1920, 3), dtype = np.uint8)
start = timer()
create_fractal(-4.0, -4.0 + 80.0 / 9.0, 4.0, 9.0, image, 50)
dt = timer() - start
print "Fractal generated in %f s" % dt
imshow(image, origin='lower', extent=(-4.0, -4.0 + 80.0 / 9.0, 4.0, 9.0))
show()