Help with chaos math extensions.
Brandon K
prince_amir86 at yahoo.com
Wed Oct 5 08:12:08 EDT 2005
Here's the Script it was being used in (forgive it if it seems a bit
messy, i have been tinkering with variables and such to try different
ideas and haven't really cleaned it up).
import ctest
import Tkinter
import threading
hue_map =
("#FFFFFF","#FEFEFF","#FDFDFF","#FCFCFF","#FBFBFF","#FAFAFF","#F9F9FF","#F8F8F8","#F7F7FF","#F6F6F6","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF",\
"#7777FF","#6666FF","#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF")
class Mandelbrot_Set(Tkinter.Canvas):
def __init__(self,master,iters):
Tkinter.Canvas.__init__(self,master)
self.dims = {'x':500,'y':500}
self.config(height=self.dims['y'],width=self.dims['x'])
self.r_range = (-2.0,2.0)
self.i_range = (-2.0,2.0)
self.iters = iters
self.prec =
{'r':1.*(self.r_range[1]-self.r_range[0])/(self.dims['x']),'i':1.*(self.i_range[1]-self.i_range[0])/self.dims['y']}
self.escapemap =
ctest.escapeMap(-1j,self.iters,(self.dims['x'],self.dims['y']),(self.r_range[0],self.r_range[1]),(self.i_range[0],self.i_range[1]))
self.select = False
self.select_event = (0,0)
self.sbox = None
self.bind("<Button-1>",self.selection_box)
self.bind("<Motion>",self.select_update)
self.t_draw = threading.Thread(target=self.draw)
self.t_draw.start()
def draw(self):
for j in range(self.dims['y']):
i = 0
while i < self.dims['x']:
cur = 0;
try:
color = self.escapemap[j][i]
while self.escapemap[j][i+cur] == color:
cur+=1
except IndexError:
break;
hue_step = 1.*len(hue_map)/self.iters
if color == -1: f = "#000000"
else: f = hue_map[int(hue_step*color)]
self.create_line(i,j,i+cur,j,fill=f)
i+=cur
def selection_box(self,event):
if not self.select:
self.select_event = (event.x,event.y)
self.select = True
else:
self.r_range = self.new_range(event.x,self.select_event[0])
self.i_range = self.new_range(event.y,self.select_event[1])
print self.r_range,self.i_range
self.select = False
self.delete(Tkinter.ALL)
self.t_draw.run()
self.select_update(event)
def new_range(self,x,y):
if x > y:
return (y,x)
else:
return (x,y)
def select_update(self,event):
if not self.select:
return
else:
if self.sbox != None:
self.delete(self.sbox)
self.sbox =
self.create_rectangle(self.select_event[0],self.select_event[1],event.x,event.y,fill=None,outline="#000000")
else:
self.sbox =
self.create_rectangle(self.select_event[0],self.select_event[1],event.x,event.y,fill=None,outline="#000000")
if __name__ == "__main__":
root = Tkinter.Tk()
c = Mandelbrot_Set(root,50)
c.pack()
root.mainloop()
The error occurs in the instantiation of the Mandelbrot_Set object.
Additionally in little mini timing scripts such as
import time
import ctest
t = time.time()
c = ctest.escapeMap(-1j,100,(500,500))
print time.time()-t
this will crash it too
however I found that just opening up the interpreter and typing
import ctest
ctest.escapeMap(-1j,100,(50,50)) #50 yields much smaller output than 500x500
it generates a 2d tuple fine. So the error seems really obscure to me,
and I don't understand it.
> Brandon Keown wrote:
>
>
>> I have programmed a fractal generator (Julia Set/Mandelbrot Set) in
>> python in the past, and have had good success, but it would run so
>> slowly because of the overhead involved with the calculation. I
>> recently purchased VS .NET 2003 (Win XP, precomp binary of python
>> 2.4.2rc1) to make my own extensions. I was wondering if anyone could
>> help me figure out why I'm getting obscure memory exceptions (runtime
>> errors resulting in automatic closing of Python) with my extension. It
>> seems to run okay if imported alone, but when accompanied in a list of
>> instructions such as a function it crashes.
>>
>
> a short script or interpreter session that illustrates how to get the errors
> would help.
>
> </F>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20051005/3d04a590/attachment.html>
More information about the Python-list
mailing list