import turtle def draw_triangle(t, vertices, color): """ Draws a filled triangle with the given vertices and color. """ t.fillcolor(color) t.penup() t.goto(vertices[0]) t.pendown() t.begin_fill() t.goto(vertices[1]) t.goto(vertices[2]) t.goto(vertices[0]) t.end_fill() def get_midpoint(p1, p2): """ Returns the midpoint between two points p1 and p2. """ return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2) def sierpinski(t, vertices, depth): """ Recursively draws a Sierpinski Triangle. """ colormap = ['blue', 'red', 'green', 'white', 'yellow', 'violet', 'orange'] draw_triangle(t, vertices, colormap[depth % len(colormap)]) if depth > 0: mid0_1 = get_midpoint(vertices[0], vertices[1]) mid1_2 = get_midpoint(vertices[1], vertices[2]) mid2_0 = get_midpoint(vertices[2], vertices[0]) sierpinski(t, [vertices[0], mid0_1, mid2_0], depth - 1) sierpinski(t, [vertices[1], mid1_2, mid0_1], depth - 1) sierpinski(t, [vertices[2], mid2_0, mid1_2], depth - 1) def main(): screen = turtle.Screen() screen.bgcolor('white') t = turtle.Turtle() t.speed(0) # Original vertices of the triangle original_vertices = [[-200, -100], [0, 200], [200, -100]] # Scale up the vertices by 33% scale_factor = 1.33 scaled_vertices = [[x * scale_factor, y * scale_factor] for x, y in original_vertices] sierpinski(t, scaled_vertices, 4) t.hideturtle() screen.mainloop() if __name__ == "__main__": main()