# recursive (Sierpinski) triangles # updated by cmc, 3/3/2015 import turtle import sys # start listing_09_04.py from Miller/Ranum: def drawTriangle(t,p1,p2,p3): t.up() t.goto(p1) t.down() t.goto(p2) t.goto(p3) t.goto(p1) def midPoint(p1,p2): return ((p1[0]+p2[0])/2.0,(p1[1]+p2[1])/2.0) def sierpinski(myTurtle,p1,p2,p3,depth): if depth > 0: sierpinski(myTurtle,p1,midPoint(p1,p2),midPoint(p1,p3),depth-1,) sierpinski(myTurtle,p2,midPoint(p2,p3),midPoint(p2,p1),depth-1,) sierpinski(myTurtle,p3,midPoint(p3,p1),midPoint(p3,p2),depth-1,) else: drawTriangle(myTurtle,p1,p2,p3) # end listing_09_04.py def main(): ''' starts the application, and processes first command line argument if present - depth of recursion assumed ''' p1 = [-200, -200] p2 = [200, -200] p3 = [0, 200] defaultDepth = 3 if len(sys.argv) < 2: depth = defaultDepth else: try: depth = int(sys.argv[1]) except: print("\nError:", sys.exc_info()[0]) print("Setting depth to ", defaultDepth) depth = defaultDepth t = turtle.Turtle() t.hideturtle() sierpinski(t, p1, p2, p3, depth) t.getscreen().exitonclick() main()