以函数递归的形式实现谢尔宾斯基三角形的python程序代码
时间: 2024-06-13 12:04:25 浏览: 96
下面是以函数递归的形式实现谢尔宾斯基三角形的Python程序代码:
```
import turtle
def drawTriangle(points, color, t):
t.fillcolor(color)
t.penup()
t.goto(points['top'])
t.pendown()
t.begin_fill()
t.goto(points['left'])
t.goto(points['right'])
t.goto(points['top'])
t.end_fill()
def getMid(p1, p2):
return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)
def sierpinski(degree, points, t):
colormap = ['blue','red','green','white','yellow',
'violet','orange']
drawTriangle(points, colormap[degree], t)
if degree > 0:
sierpinski(degree-1,
{'left':points['left'],
'top':getMid(points['left'], points['top']),
'right':getMid(points['left'], points['right'])},
t)
sierpinski(degree-1,
{'left':getMid(points['left'], points['top']),
'top':points['top'],
'right':getMid(points['top'], points['right'])},
t)
sierpinski(degree-1,
{'left':getMid(points['left'], points['right']),
'top':getMid(points['top'], points['right']),
'right':points['right']},
t)
t = turtle.Turtle()
myWin = turtle.Screen()
myPoints = {'left':(-200,-100),
'top':(0,200),
'right':(200,-100)}
sierpinski(3, myPoints, t)
myWin.exitonclick()
```
这个程序使用了递归的方式来实现谢尔宾斯基三角形的绘制。首先定义了一个绘制三角形的函数drawTriangle,然后定义了一个获取两个点中点的函数getMid。接着定义了一个递归函数sierpinski,该函数接受三个参数:degree表示当前的阶数,points表示当前三角形的三个顶点坐标,t表示turtle对象。在sierpinski函数中,首先使用drawTriangle函数绘制当前三角形,然后判断当前阶数是否大于0,如果大于0,则递归调用sierpinski函数,分别绘制左、上、右三个小三角形。最后,在主函数中定义了一个turtle对象t和一个三角形的顶点坐标字典myPoints,然后调用sierpinski函数绘制谢尔宾斯基三角形。
阅读全文