You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.4 KiB
63 lines
1.4 KiB
3 years ago
|
#!/usr/bin/env python3
|
||
|
""" turtle-example-suite:
|
||
|
|
||
|
tdemo_tree.py
|
||
|
|
||
|
Displays a 'breadth-first-tree' - in contrast
|
||
|
to the classical Logo tree drawing programs,
|
||
|
which use a depth-first-algorithm.
|
||
|
|
||
|
Uses:
|
||
|
(1) a tree-generator, where the drawing is
|
||
|
quasi the side-effect, whereas the generator
|
||
|
always yields None.
|
||
|
(2) Turtle-cloning: At each branching point
|
||
|
the current pen is cloned. So in the end
|
||
|
there are 1024 turtles.
|
||
|
"""
|
||
|
from turtle import Turtle, mainloop
|
||
|
from time import perf_counter as clock
|
||
|
|
||
|
def tree(plist, l, a, f):
|
||
|
""" plist is list of pens
|
||
|
l is length of branch
|
||
|
a is half of the angle between 2 branches
|
||
|
f is factor by which branch is shortened
|
||
|
from level to level."""
|
||
|
if l > 3:
|
||
|
lst = []
|
||
|
for p in plist:
|
||
|
p.forward(l)
|
||
|
q = p.clone()
|
||
|
p.left(a)
|
||
|
q.right(a)
|
||
|
lst.append(p)
|
||
|
lst.append(q)
|
||
|
for x in tree(lst, l*f, a, f):
|
||
|
yield None
|
||
|
|
||
|
def maketree():
|
||
|
p = Turtle()
|
||
|
p.setundobuffer(None)
|
||
|
p.hideturtle()
|
||
|
p.speed(0)
|
||
|
p.getscreen().tracer(30,0)
|
||
|
p.left(90)
|
||
|
p.penup()
|
||
|
p.forward(-210)
|
||
|
p.pendown()
|
||
|
t = tree([p], 200, 65, 0.6375)
|
||
|
for x in t:
|
||
|
pass
|
||
|
|
||
|
def main():
|
||
|
a=clock()
|
||
|
maketree()
|
||
|
b=clock()
|
||
|
return "done: %.2f sec." % (b-a)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
msg = main()
|
||
|
print(msg)
|
||
|
mainloop()
|