目录
一、谢尔宾斯基Sierpinski三角形
分形构造,平面称谢尔宾斯基三角形,立体称希尔宾斯基金字塔。
下图中,根据自相似特性,希尔宾斯基三角形是由三个尺寸减半的谢尔宾斯基三角形按照品字形叠加而成。
二、作图思路
在degree有限的情况下,degree=n的三角形,是由3个degree=n-1的三角形按照品字形叠加而成。
同时,这3个degree=n-1的三角形的变成均为degree=n的三角形的一半(规模减小)。
degree=0,则就是一个等边三角形,这是基本结束条件。
三、代码
import turtle
def sierpinski(degree, points):
colormap = ['blue', 'red', 'green', 'white', 'yellow', 'orange']
drawTriangle(points, colormap[degree])
if degree > 0:
# 左边的三角形
sierpinski(degree - 1,
{'left':points['left'],
'top': getMid(points['left'], points['top']),
'right': getMid(points['left'], points['right'])})
# 上面的三角形
sierpinski(degree - 1,
{'left': getMid(points['left'], points['top']),
'top': points['top'],
'right': getMid(points['top'], points['right'])})
# 上面的三角形
sierpinski(degree - 1,
{'left': getMid(points['left'], points['right']),
'top': getMid(points['top'], points['right']),
'right': points['right']})
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)
t = turtle.Turtle()
points = {
'left': (-200, -100),
'top': (0, 200),
'right': (200, -100)
}
sierpinski(5, points)
turtle.done()
输出: