annotate 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
rev   line source
jpayne@69 1 #!/usr/bin/env python3
jpayne@69 2 """ turtlegraphics-example-suite:
jpayne@69 3
jpayne@69 4 tdemo_forest.py
jpayne@69 5
jpayne@69 6 Displays a 'forest' of 3 breadth-first-trees
jpayne@69 7 similar to the one in tree.
jpayne@69 8 For further remarks see tree.py
jpayne@69 9
jpayne@69 10 This example is a 'breadth-first'-rewrite of
jpayne@69 11 a Logo program written by Erich Neuwirth. See
jpayne@69 12 http://homepage.univie.ac.at/erich.neuwirth/
jpayne@69 13 """
jpayne@69 14 from turtle import Turtle, colormode, tracer, mainloop
jpayne@69 15 from random import randrange
jpayne@69 16 from time import perf_counter as clock
jpayne@69 17
jpayne@69 18 def symRandom(n):
jpayne@69 19 return randrange(-n,n+1)
jpayne@69 20
jpayne@69 21 def randomize( branchlist, angledist, sizedist ):
jpayne@69 22 return [ (angle+symRandom(angledist),
jpayne@69 23 sizefactor*1.01**symRandom(sizedist))
jpayne@69 24 for angle, sizefactor in branchlist ]
jpayne@69 25
jpayne@69 26 def randomfd( t, distance, parts, angledist ):
jpayne@69 27 for i in range(parts):
jpayne@69 28 t.left(symRandom(angledist))
jpayne@69 29 t.forward( (1.0 * distance)/parts )
jpayne@69 30
jpayne@69 31 def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):
jpayne@69 32 # benutzt Liste von turtles und Liste von Zweiglisten,
jpayne@69 33 # fuer jede turtle eine!
jpayne@69 34 if level > 0:
jpayne@69 35 lst = []
jpayne@69 36 brs = []
jpayne@69 37 for t, branchlist in list(zip(tlist,branchlists)):
jpayne@69 38 t.pensize( size * widthfactor )
jpayne@69 39 t.pencolor( 255 - (180 - 11 * level + symRandom(15)),
jpayne@69 40 180 - 11 * level + symRandom(15),
jpayne@69 41 0 )
jpayne@69 42 t.pendown()
jpayne@69 43 randomfd(t, size, level, angledist )
jpayne@69 44 yield 1
jpayne@69 45 for angle, sizefactor in branchlist:
jpayne@69 46 t.left(angle)
jpayne@69 47 lst.append(t.clone())
jpayne@69 48 brs.append(randomize(branchlist, angledist, sizedist))
jpayne@69 49 t.right(angle)
jpayne@69 50 for x in tree(lst, size*sizefactor, level-1, widthfactor, brs,
jpayne@69 51 angledist, sizedist):
jpayne@69 52 yield None
jpayne@69 53
jpayne@69 54
jpayne@69 55 def start(t,x,y):
jpayne@69 56 colormode(255)
jpayne@69 57 t.reset()
jpayne@69 58 t.speed(0)
jpayne@69 59 t.hideturtle()
jpayne@69 60 t.left(90)
jpayne@69 61 t.penup()
jpayne@69 62 t.setpos(x,y)
jpayne@69 63 t.pendown()
jpayne@69 64
jpayne@69 65 def doit1(level, pen):
jpayne@69 66 pen.hideturtle()
jpayne@69 67 start(pen, 20, -208)
jpayne@69 68 t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] )
jpayne@69 69 return t
jpayne@69 70
jpayne@69 71 def doit2(level, pen):
jpayne@69 72 pen.hideturtle()
jpayne@69 73 start(pen, -135, -130)
jpayne@69 74 t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] )
jpayne@69 75 return t
jpayne@69 76
jpayne@69 77 def doit3(level, pen):
jpayne@69 78 pen.hideturtle()
jpayne@69 79 start(pen, 190, -90)
jpayne@69 80 t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] )
jpayne@69 81 return t
jpayne@69 82
jpayne@69 83 # Hier 3 Baumgeneratoren:
jpayne@69 84 def main():
jpayne@69 85 p = Turtle()
jpayne@69 86 p.ht()
jpayne@69 87 tracer(75,0)
jpayne@69 88 u = doit1(6, Turtle(undobuffersize=1))
jpayne@69 89 s = doit2(7, Turtle(undobuffersize=1))
jpayne@69 90 t = doit3(5, Turtle(undobuffersize=1))
jpayne@69 91 a = clock()
jpayne@69 92 while True:
jpayne@69 93 done = 0
jpayne@69 94 for b in u,s,t:
jpayne@69 95 try:
jpayne@69 96 b.__next__()
jpayne@69 97 except:
jpayne@69 98 done += 1
jpayne@69 99 if done == 3:
jpayne@69 100 break
jpayne@69 101
jpayne@69 102 tracer(1,10)
jpayne@69 103 b = clock()
jpayne@69 104 return "runtime: %.2f sec." % (b-a)
jpayne@69 105
jpayne@69 106 if __name__ == '__main__':
jpayne@69 107 main()
jpayne@69 108 mainloop()