Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import turtle
- import math
- import sys
- COMPLEMENT=120
- FACTOR = math.sqrt(3)/2
- class Carpet:
- def __init__(self, x, y, side):
- self.x = x
- self.y = y
- self.side = side
- self.height = FACTOR*side
- def _children(self, x, y, side, height, step=0):
- if step==0:
- yield (x, y)
- else:
- newSide = side/2
- newHeight = height/2
- for f in self._children(x, y, newSide, newHeight, step - 1):
- yield f
- for f in self._children(x + newSide, y, newSide, newHeight, step - 1):
- yield f
- for f in self._children(x + newSide/2, y + newHeight, newSide, newHeight, step - 1):
- yield f
- def children(self, step=0):
- return self._children(self.x, self.y, self.side, self.height, step)
- def paintTriangle(t, x, y, size):
- t.penup()
- t.goto(x, y)
- t.pendown()
- t.fillcolor(0, 0, 0)
- t.begin_fill()
- t.forward(size)
- t.left(COMPLEMENT)
- t.forward(size)
- t.left(COMPLEMENT)
- t.forward(size)
- t.end_fill()
- t.left(COMPLEMENT)
- if __name__ == '__main__':
- try:
- steps = int(sys.argv[1])
- except IndexError:
- steps = 3
- sw, sh = turtle.screensize()
- size = 2*sh
- tx = -sh
- ty = -math.sqrt(3)/4*size
- t = turtle.Pen()
- t.hideturtle()
- t.speed('fastest')
- carpet = Carpet(tx, ty, size)
- turtle.tracer(False)
- triangles = 0
- for x, y in carpet.children(steps):
- paintTriangle(t, x, y, size/2**steps)
- triangles += 1
- turtle.title('Number of triangles: ' + str(triangles))
- turtle.update()
- turtle.title("Sierpinski's triangle <" + str(triangles) + " triangles>")
- turtle.exitonclick()
Advertisement
Add Comment
Please, Sign In to add comment