Fork me on GitHub




In [1]:
import numpy as np
In [2]:
from pylab import imshow, show
In [3]:
import math
In [4]:
from timeit import default_timer as timer
In [5]:
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
In [6]:
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
In [7]:
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()
Fractal generated in 46.978858 s

In [8]:
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()
Fractal generated in 109.465202 s

In [9]:
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()
Fractal generated in 88.165300 s

In [ ]:






© 2016 Valera Rozuvan. Fork me at GitHub.