当前位置 博文首页 > 是Dream呀的博客:递归的可视化之绘制谢尔平斯基三角形
利用递归函数绘制谢尔平斯基三角形
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