sawine@1: import time sawine@1: sawine@1: def profile(func): sawine@1: def wrapper(*arg): sawine@1: t1 = time.clock() sawine@1: res = func(*arg) sawine@1: t2 = time.clock() sawine@1: print "duration: %fs" % float(t2-t1) sawine@1: return res sawine@1: return wrapper sawine@1: sawine@1: def isDivergent(c): sawine@1: if c.real == float("inf") or c.real == float("-inf"): sawine@0: return True sawine@1: if c.imag == float("inf") or c.imag == float("-inf"): sawine@1: return True sawine@1: return False sawine@1: sawine@1: def isPeriodic(z): sawine@0: return False sawine@0: sawine@0: class Cell(object): sawine@0: def __init__(self, c, value, iterations): sawine@0: self.c = c sawine@0: self.value = value sawine@0: self.iterations = iterations sawine@0: sawine@0: class Mandelbrot(object): sawine@0: def __init__(self, range, resolution): sawine@0: self.range = range sawine@0: self.resolution = resolution sawine@0: def iterate(self, z, c): sawine@0: return z * z + c sawine@0: def test(self, c, max_iter): sawine@0: z = [0] sawine@0: for i in xrange(max_iter): sawine@0: z.append(self.iterate(z[-1], c)) sawine@1: if isDivergent(z[-1]): sawine@1: break sawine@1: if isPeriodic(z[-10:-1]): sawine@0: break sawine@0: return z sawine@1: @profile sawine@0: def resolve(self, max_iter): sawine@0: cells = {} sawine@0: x_diff = (self.range[1].real - self.range[0].real) / self.resolution[0] sawine@0: y_diff = (self.range[1].imag - self.range[0].imag) / self.resolution[1] sawine@0: c_diff = complex(x_diff, y_diff) sawine@0: sawine@0: for y in xrange(self.resolution[1]): sawine@0: for x in xrange(self.resolution[0]): sawine@0: c = self.range[0] + c_diff * complex(x, y) sawine@1: #print c sawine@1: #print self.test(c, max_iter) sawine@0: sawine@0: sawine@0: