谢尔宾斯基三角形:Python+turtle

 本来觉得谢尔宾斯基三角形挺难的。分析以后,其实还是挺简单的。

挺好理解,供大家一起学习

"""
    功能:绘制谢尔宾斯基三角形
    环境:python3.7
    日期:2019/1/14 21:49
    作者:指尖魔法师
    版本:1.0
"""
import turtle as t


def sanjiaoxing(san):
    """
    传入三个点座标,绘制三角形
    """
    t.penup()
    t.goto(san[0])
    t.pendown()
    t.goto(san[1])
    t.goto(san[2])
    t.goto(san[0])


def get_mid(a, b):
    """
    计算返回2个点的中间点座标
    """
    x = (a[0] + b[0]) / 2
    y = (a[1] + b[1]) / 2
    return [x, y]


def draw_san(size, i):
    """
    绘制谢尔宾斯基三角形函数
    :param size: 三个点座标列表
    :param i: 递归次数
    """
    # 绘制三角形
    sanjiaoxing(size)
    if i > 0:
        # 绘制左边小三角形
        size2 = [size[0], get_mid(size[0], size[1]), get_mid(size[0], size[2])]
        draw_san(size2, i - 1)

        # 绘制上边的小三角形
        size3 = [get_mid(size[0], size[2]), get_mid(size[1], size[2]), size[2]]
        draw_san(size3, i - 1)
        
        # 绘制右边的小三角形
        size4 = [get_mid(size[0], size[1]), size[1], get_mid(size[1], size[2])]
        draw_san(size4, i - 1)


def main():
    """
    主函数
    """
    # 打印图形标题
    t.penup()
    t.left(90)
    t.forward(350)
    t.pendown()
    t.write("谢尔宾斯基三角形", False, align="center", font=("宋体", 20, "normal"))
    t.speed(5)

    # 初始三角形座标
    points = [[-200, 0], [200, 0], [0, 300]]
    # 递归5次
    count = 5
    # 调用绘制谢尔宾斯基三角形函数
    draw_san(points, count)

    t.exitonclick()


if __name__ == '__main__':
    main()

运行结果: 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章