import turtle
def tree(branch_len):
if branch_len > 5: # 树干太短不画,即递归结束条件
t.forward(branch_len) # 画树干
t.right(20) # 右倾斜20度
tree(branch_len - 15) # 递归调用,画右边的小树,树干减15
t.left(40) # 向左回40度,即左倾斜20度
tree(branch_len - 15) # 递归调用,画左边的小树,树干减15
t.right(20) # 向右回20度,即回正
t.backward(branch_len) # 海龟退回原位置
t = turtle.Turtle()
t.left(90)
t.penup()
t.backward(100)
t.pendown()
t.pencolor('green')
t.pensize(2)
tree(75) # 画树干长度为75的二叉树
t.hideturtle()
turtle.done()
import turtle
def sierpinski(degree, points):
colormap = ['blue', 'red', 'green', 'white', 'yellow', 'orange']
drawTriangle(points, colormap[degree]) # 等边三角形
if degree > 0: # 最小规模,0直接退出
# 减小规模,getMid边长减半
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()