algorithm.py
author Eugen Sawin <sawine@me73.com>
Sun, 13 Jun 2010 01:53:58 +0200
changeset 1 0ebb73fd094a
parent 0 a99535269d60
child 2 b887ce19c300
permissions -rw-r--r--
Profiling added.
     1 import time
     2 
     3 def profile(func):
     4 	def wrapper(*arg):
     5 		t1 = time.clock()
     6 		res = func(*arg)
     7 		t2 = time.clock()
     8 		print "duration: %fs" % float(t2-t1)
     9 		return res
    10 	return wrapper
    11 
    12 def isDivergent(c):
    13 	if c.real == float("inf") or c.real == float("-inf"):
    14 		return True
    15 	if c.imag == float("inf") or c.imag == float("-inf"):
    16 		return True
    17 	return False
    18 
    19 def isPeriodic(z):
    20 	return False
    21 
    22 class Cell(object):
    23 	def __init__(self, c, value, iterations):
    24 		self.c = c
    25 		self.value = value
    26 		self.iterations = iterations
    27 		
    28 class Mandelbrot(object):
    29 	def __init__(self, range, resolution):
    30 		self.range = range
    31 		self.resolution = resolution
    32 	def iterate(self, z, c):
    33 		return z * z + c
    34 	def test(self, c, max_iter):
    35 		z = [0]
    36 		for i in xrange(max_iter):
    37 			z.append(self.iterate(z[-1], c))
    38 			if isDivergent(z[-1]):
    39 				break
    40 			if isPeriodic(z[-10:-1]):
    41 				break
    42 		return z
    43 	@profile	
    44 	def resolve(self, max_iter):
    45 		cells = {}
    46 		x_diff = (self.range[1].real - self.range[0].real) / self.resolution[0]
    47 		y_diff = (self.range[1].imag - self.range[0].imag) / self.resolution[1]
    48 		c_diff = complex(x_diff, y_diff)
    49 		
    50 		for y in xrange(self.resolution[1]):
    51 			for x in xrange(self.resolution[0]):	
    52 				c = self.range[0] + c_diff * complex(x, y)
    53 				#print c
    54 				#print self.test(c, max_iter)
    55 					
    56 	
    57