Kirby Urner schrieb:
Attention: this is a somewhat technical question/contribution (in contrast to the more philosophical ones concerning the design an didactics of cs courses)OK, ...
=== Math & Programming: From Chaos to Python
Explore topics in mathematics by writing and modifying programs in a contemporary computer language.
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
