分形树绘制1.0
案例描述
案例分析
程序
可以写一些print,帮助理解
树0.0:
完整程序:
"""
作者:张梦
功能:用迭代绘制分形树
版本:1.0
日期:2018.12.9
"""
"""引用turtle库"""
import turtle
"""绘制树枝"""
def draw_branch(branch_length):
if branch_length > 5:
# 绘制右侧树枝
turtle.forward(branch_length)
print('向前', branch_length)
turtle.right(20)
print('右转,20')
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
print('左转,40')
draw_branch(branch_length - 15)
# 返回之前的树枝
turtle.right(20)
print('右转,20')
turtle.backward(branch_length)
print('返回', branch_length)
"""主函数"""
def main ():
turtle.left(90)
turtle.penup()
turtle.backward(150)
turtle.pendown()
turtle.color('brown')
draw_branch(100)
turtle.exitonclick()
if __name__ =="__main__":
main()
树1.0:
树枝末端加了颜色
程序:(只修改了子程序:draw_branch)
def draw_branch(branch_length):
if branch_length > 5:
# 绘制右侧树枝
turtle.forward(branch_length)
print('向前', branch_length)
turtle.right(20)
print('右转,20')
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
print('左转,40')
draw_branch(branch_length - 15)
#树枝末端加颜色
if branch_length <= 25:
turtle.color('green')
else:
turtle.color('brown')
# 返回之前的树枝
turtle.right(20)
print('右转,20')
turtle.backward(branch_length)
print('返回', branch_length)
强调:
树2.0:
枝干变得有粗有细
由于迭代的原因,画最右边的树枝,一定画到头,才会返回然后画左边的树枝,而判断语句在画左边和返回之间,所以当画完右边返回时颜色才由棕色变为绿色,覆盖住原来的棕色,画出来是对的,但这个不适用于粗细。因为已经画完粗的返回时细的是盖不住粗的,所以就有了上图效果。
程序:(只修改了子程序:draw_branch)
def draw_branch(branch_length):
if branch_length > 5:
# 绘制右侧树枝
turtle.forward(branch_length)
print('向前', branch_length)
turtle.right(20)
print('右转,20')
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
print('左转,40')
draw_branch(branch_length - 15)
#树枝末端加颜色
if branch_length <= 25:
turtle.color('green')
else:
turtle.color('brown')
#树枝变粗细
if branch_length == 70:
turtle.pensize(3)
elif branch_length == 55:
turtle.pensize(2)
elif branch_length == 40:
turtle.pensize(1)
elif branch_length == 25:
turtle.pensize(2)
else:
turtle.pensize(1)
# 返回之前的树枝
turtle.right(20)
print('右转,20')
turtle.backward(branch_length)
print('返回', branch_length)
强调:
树3.0
所以还是老老实实画每个树枝都判断一下吧
程序:(只修改了子程序:draw_branch)
def draw_branch(branch_length):
if branch_length > 5:
# 绘制右侧树枝
turtle.forward(branch_length)
print('向前', branch_length)
turtle.right(20)
print('右转,20')
if branch_length <= 25:
turtle.color('green')
else:
turtle.color('brown')
if branch_length == 100:
turtle.pensize(5)
elif branch_length == 85:
turtle.pensize(4)
elif branch_length == 70:
turtle.pensize(3)
elif branch_length == 55:
turtle.pensize(2)
else:
turtle.pensize(1)
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
print('左转,40')
if branch_length <= 25:
turtle.color('green')
else:
turtle.color('brown')
if branch_length == 100:
turtle.pensize(5)
elif branch_length == 85:
turtle.pensize(4)
elif branch_length == 70:
turtle.pensize(3)
elif branch_length == 55:
turtle.pensize(2)
else:
turtle.pensize(1)
draw_branch(branch_length - 15)
# 返回之前的树枝
turtle.right(20)
print('右转,20')
if branch_length <= 25:
turtle.color('green')
else:
turtle.color('brown')
if branch_length == 100:
turtle.pensize(5)
elif branch_length == 85:
turtle.pensize(4)
elif branch_length == 70:
turtle.pensize(3)
elif branch_length == 55:
turtle.pensize(2)
else:
turtle.pensize(1)
turtle.backward(branch_length)
print('返回', branch_length)
其实这里还可以把变颜色和变粗细的程序放到一个子函数里,简洁多了,但是我懒得弄了。。。