| 
									
										
										
										
											2010-03-11 22:53:45 +00:00
										 |  |  | #!/usr/bin/env python3 | 
					
						
							| 
									
										
										
										
											2008-06-10 04:44:07 +00:00
										 |  |  | """      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. | 
					
						
							| 
									
										
										
										
											2014-06-24 22:21:41 -04:00
										 |  |  | (2) Turtle-cloning: At each branching point | 
					
						
							|  |  |  | the current pen is cloned. So in the end | 
					
						
							|  |  |  | there are 1024 turtles. | 
					
						
							| 
									
										
										
										
											2008-06-10 04:44:07 +00:00
										 |  |  | """
 | 
					
						
							| 
									
										
										
										
											2008-09-21 07:32:10 +00:00
										 |  |  | from turtle import Turtle, mainloop | 
					
						
							| 
									
										
										
										
											2017-10-17 14:46:45 -07:00
										 |  |  | from time import perf_counter as clock | 
					
						
							| 
									
										
										
										
											2008-06-10 04:44:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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() |