Kirby Urner schrieb:

OK, ...

===
Math & Programming: From Chaos to Python

Explore topics in mathematics by writing and modifying programs in a
contemporary computer language.

Attention: this is a somewhat technical question/contribution (in contrast to the more philosophical ones concerning the design an didactics of cs courses)

Hi Kirby and all the others!

In one of my classes I'm just doing similar things. Starting with the very first program of John Zelle's mervelous book I arrived at a program drawing a Feigenbaum diagram. With this - and I think with all those chaos/fractal-programs which use pixel graphics - there occurs the problem, that pixel graphics with Tkinter is *very* slow. Although I have used a few tricks to make the program fast it still needs approximately 50 seconds to draw the diagram (on my machine). Moreover it show's that the slow operation is indeed the put-method of PhotoImage (and the update method). My students of course searching the net find Feigenbaum applets performing much faster. Being asked about that my (somewhat poor) answer is, yes it's slow in Python but the advantage is: *you* can write it in Python, whereas you can't write it in Java. Not really satisfying.
As this is a problem concerning a large class of applications (at least in the context of programming in highschool) I dream of having at hand some easily usable class which defines a window for doing fast pixel graphics.
As far as I know there are a *lot* of graphics-Toolkits for Python out there. Which of them could be used for this task? What are your experiences? Do you have significantly faster solutions?


Here is the code of my solution using Tkinter:

# Autor: Gregor Lingl
# Datum: 21. 10. 2004
# feigen.py : zeichnet ein Feigenbaum-Diagramm

from Tkinter import Tk, PhotoImage, Label

WIDTH = 700
HEIGHT = 500
NUM = 2*HEIGHT//3

def f(x):
   return LAMBDA * x * (1-x)

root = Tk()
root.title("Feigenbaum Diagram")
pic = PhotoImage(width=WIDTH+1, height=HEIGHT)
lbl = Label(root, image=pic, bg='white')
lbl.pack()

for i in range(8):
   for j in range(0,HEIGHT):
       pic.put("red", (int(round(WIDTH/7.0)*i),j))
root.update()

for frac in range(WIDTH):
   LAMBDA = 3.3 + frac*0.7/WIDTH
   x = 0.5   # initial value for iteration
   ys={}
   for i in range(150):
       x = f(x)
   for i in range(NUM):
       x = f(x)
       ys[int(HEIGHT*x)]=True
   for y in ys:
       pic.put("black", (frac,y))
   if frac%10==0:root.update()

root.mainloop()

A goal of this class is to help you gain proficiency as a programmer, while
delving into number theory, group theory, chaos and fractals,


the above program was intended to do just this ...

Another example is from my book "Python f�r Kids" showing a more regular fractal (but suffering froom the same problem ...):

### Python f�r Kids - Kapitel 12 ###
# Autor: Gregor Lingl
# Datum: 13. 10. 2002
# simplefractal.py : zeichnet ein Sierpinsky-Dreieck

from Tkinter import Tk, PhotoImage, Label
from random import randrange, choice

def mittelpunkt(a,b):
   (x1,y1), (x2,y2) = a, b
   return ( int(round((x1+x2)/2.0)),
            int(round((y1+y2)/2.0)) )

def sierpinsky():
   global pixel
   while running:
       for i in range(20):
           ecke = choice(ecken)
           pixel = mittelpunkt(pixel,ecke)
           bild.put('black',pixel)
       root.update()

def start(event):
   print "START"
   global running
   running = 1
   sierpinsky()

def stop(event):
   print "STOP"
   global running
   running = 0

if __name__ == "__main__":
   root = Tk()
   bild = PhotoImage(width=300, height=300)
   lbl = Label(root, image=bild, bg='white')
   lbl.pack()
   root.bind('<Button-1>', start)
   root.bind('<Button-3>', stop)

   ecken = a, b, c = (20,265),(280,265),(150,40)
   pixel = randrange(300), randrange(300)
   for p in (a, b, c, pixel):
       bild.put("black", p)
   root.update()
   root.mainloop()


Any feedback, any suggestions, propositions, solutions are welcome

Regards,
Gregor

P.S.: Some conversations on the list - e. g. the one following the posting to which this is a reply - are really difficult to follow for me, as I'm not using English as a native language. Sometimes there seems to prevail some strange sort of humour or animosity. If that is funny for you, that's o.k. but nevertheless I doubt if it's useful for our concerns. (I'm well aware of the fact that it might be equally difficult for you to understand what I try to say in my rather poor English.)

_______________________________________________
Edu-sig mailing list
[EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/edu-sig

Reply via email to