謝爾賓斯基三角形: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()

運行結果: 

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