diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/turtledemo/forest.py @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/turtledemo/forest.py	Tue Mar 18 17:55:14 2025 -0400
@@ -0,0 +1,108 @@
+#!/usr/bin/env python3
+"""     turtlegraphics-example-suite:
+
+             tdemo_forest.py
+
+Displays a 'forest' of 3 breadth-first-trees
+similar to the one in tree.
+For further remarks see tree.py
+
+This example is a 'breadth-first'-rewrite of
+a Logo program written by Erich Neuwirth. See
+http://homepage.univie.ac.at/erich.neuwirth/
+"""
+from turtle import Turtle, colormode, tracer, mainloop
+from random import randrange
+from time import perf_counter as clock
+
+def symRandom(n):
+    return randrange(-n,n+1)
+
+def randomize( branchlist, angledist, sizedist ):
+    return [ (angle+symRandom(angledist),
+              sizefactor*1.01**symRandom(sizedist))
+                     for angle, sizefactor in branchlist ]
+
+def randomfd( t, distance, parts, angledist ):
+    for i in range(parts):
+        t.left(symRandom(angledist))
+        t.forward( (1.0 * distance)/parts )
+
+def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):
+    # benutzt Liste von turtles und Liste von Zweiglisten,
+    # fuer jede turtle eine!
+    if level > 0:
+        lst = []
+        brs = []
+        for t, branchlist in list(zip(tlist,branchlists)):
+            t.pensize( size * widthfactor )
+            t.pencolor( 255 - (180 - 11 * level + symRandom(15)),
+                        180 - 11 * level + symRandom(15),
+                        0 )
+            t.pendown()
+            randomfd(t, size, level, angledist )
+            yield 1
+            for angle, sizefactor in branchlist:
+                t.left(angle)
+                lst.append(t.clone())
+                brs.append(randomize(branchlist, angledist, sizedist))
+                t.right(angle)
+        for x in tree(lst, size*sizefactor, level-1, widthfactor, brs,
+                      angledist, sizedist):
+            yield None
+
+
+def start(t,x,y):
+    colormode(255)
+    t.reset()
+    t.speed(0)
+    t.hideturtle()
+    t.left(90)
+    t.penup()
+    t.setpos(x,y)
+    t.pendown()
+
+def doit1(level, pen):
+    pen.hideturtle()
+    start(pen, 20, -208)
+    t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] )
+    return t
+
+def doit2(level, pen):
+    pen.hideturtle()
+    start(pen, -135, -130)
+    t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] )
+    return t
+
+def doit3(level, pen):
+    pen.hideturtle()
+    start(pen, 190, -90)
+    t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] )
+    return t
+
+# Hier 3 Baumgeneratoren:
+def main():
+    p = Turtle()
+    p.ht()
+    tracer(75,0)
+    u = doit1(6, Turtle(undobuffersize=1))
+    s = doit2(7, Turtle(undobuffersize=1))
+    t = doit3(5, Turtle(undobuffersize=1))
+    a = clock()
+    while True:
+        done = 0
+        for b in u,s,t:
+            try:
+                b.__next__()
+            except:
+                done += 1
+        if done == 3:
+            break
+
+    tracer(1,10)
+    b = clock()
+    return "runtime: %.2f sec." % (b-a)
+
+if __name__ == '__main__':
+    main()
+    mainloop()