当前位置 博文首页 > 是Dream呀的博客:递归的可视化之绘制谢尔平斯基三角形

    是Dream呀的博客:递归的可视化之绘制谢尔平斯基三角形

    作者:[db:作者] 时间:2021-08-03 09:49

    绘制谢尔平斯基三角形在这里插入图片描述

    利用递归函数绘制谢尔平斯基三角形
    在这里插入图片描述

    import turtle
    # 绘制单个三角形
    def draw_triangle(points, color, t):
        t.fillcolor(color)
        t.up()
        # 将画笔移动到第一个点
        t.goto(points[0][0], points[0][1])
        t.down()
        t.begin_fill()
        t.goto(points[1][0], points[1][1])
        t.goto(points[2][0], points[2][1])
        t.goto(points[0][0], points[0][1])
        t.end_fill()
    
    # 计算两点的中位点坐标
    def mid_point(p1, p2):
        return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)
    
    
    def sierpinski(points, degree, t):
        colormap = ['blue', 'red', 'green', 'yellow', 'violet', 'orange']
        # 绘制大的三角形
        draw_triangle(points, colormap[degree], t)
        if degree >= 0:
            # 绘制左下角三角形
            sierpinski([points[0], mid_point(points[0], points[1]), mid_point(points[0], points[2])], degree - 1, t)
            # 绘制上方的三角形
            sierpinski([points[1], mid_point(points[0], points[1]), mid_point(points[1], points[2])], degree - 1, t)
            # 绘制右下角三角形
            sierpinski([points[2], mid_point(points[2], points[1]), mid_point(points[0], points[2])], degree - 1, t)
    
    
    t = turtle
    t.speed(0)  # 设置画笔的速度,0为最快
    
    win = turtle.Screen()
    points = [[-200, -100], [0, 200], [200, -100]]
    sierpinski(points, 5, t)
    win.exitonclick()
    
    
    
    ```![在这里插入图片描述](https://img-blog.csdnimg.cn/728984d61d544ad89d0c323e3ec54906.png#pic_center)
    
    
    
    cs