本來覺得謝爾賓斯基三角形挺難的。分析以後,其實還是挺簡單的。
挺好理解,供大家一起學習
"""
功能:繪製謝爾賓斯基三角形
環境: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()
運行結果: