递归应用之谢尔宾斯基三角形解法2
上一种方法是逆向思维,将挖掉后的图形看成是三个呈品字形摆放的小三角形,然后递归做。那么如果就正常思路做呢?其实也是比较容易想到的,就是先绘制出大三角形,然后再画出挖掉的图形即可。
那么如何如何绘制挖掉的三角形呢?可以看出来,0阶的没有(挖掉的)三角形,一阶的就只有一个三角形,二阶就是在一阶的基础上的每个三角形内有一个三角形。和上一篇文章一样,二阶就是在一阶的基础上每个新生成的三角形,三阶就是在二阶的基础上继续。。。
因为是在零阶的基础上画三角形(或者说至少是0阶的),所以一开始就需要直接画出来,然后递归的时候再判断。(注意由于挖掉的三角形是倒置的三角形,所以此时的‘top’其实就是底部的顶点‘foot’)
def drawTriangle(points, color):
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):
colormap = ['blue', 'red', 'green', 'yellow', 'orange&