案例简述
本次案例描绘的是一个分形树,会通过4个案例一步步进化
v1.0
知识点:
1.引用他人编辑好的库,可以用import <库名>来导入
2.直接调用编写好的模块,放入参数可以直接调用
本次可以调用turtle库来绘制,现有模块如下:
绘图坐标系:
五角星每个角度144度,所以可以先用turtle.forward(50)来绘制线条,然后right(144)右转144度。这样的操作进行5次便可成功绘制五角星。为了减少冗余代码用while循环5次便可。若想增大直接改forward参数就好。
代码参考:
""""
功能:绘制五角星
版本:v1.0、
时间:2019年2月4日16:04:23
"""
import turtle
def main():
"""
主函数
"""
# 计数次数
count = 0
# 设置循环
while count != 5:
turtle.forward(60)
turtle.right(144)
count += 1
turtle.exitonclick()
if __name__ == '__main__':
main()
v2.0
在v1.0的基础上新增循环操作,先把上述绘制五角星的语句重新用函数定义,写成可以输入五角星的大小就直接绘制,然后通过while语句循环绘制,每次绘制完就增加大小(size)
流程图如下:
知识点:
1.复习函数的定义
2.x += 1等价于 x = x + 1
""""
功能:绘制五角星
版本:v2.0
时间:2019年2月4日16:04:23
新增功能:重复绘制不同大小的五角星
"""
import turtle
def print_ptg(size):
"""
绘制五角星
"""
# 计数次数
count = 1
# 设置循环
while count <= 5:
turtle.forward(size)
turtle.right(144)
count += 1
def main():
"""
主函数
"""
# 五角星大小
size = 50
# 绘制多个五角星
while size <= 100:
# 调用参数
print_ptg(size)
size += 10
turtle.exitonclick()
if __name__ == '__main__':
main()
v3.0
在v2.0的基础上将函数与循环结合,即形成递归函数。以此绘制2.0的图形
流程图如下:
递归函数:
1.函数定义中调用函数自身的方式叫递归
2.每次函数调用时,参数都会临时保存,不会互相影响
3.达到终止条件时,各层函数结束运算,返回计算结果
4.终止条件的构建是重点,若弄不好则无法返回正常结果
"""
功能:绘制五角星
时间:2019年2月7日17:29:49
版本:3.0
新增功能:迭代绘制
"""
import turtle
0def draw_ptg(size):
"""
迭代绘制五角星
"""
# 绘制次数
count = 1
while count <= 5:
turtle.forward(size)
turtle.right(144)
count += 1
size += 10
if size <= 100:
draw_ptg(size)
def main():
"""
主函数
"""
turtle.penup() # 抬笔
turtle.backward(200) # 后退
turtle.pendown() # 下笔
turtle.pensize(2) # 笔大小
turtle.color('red') # 笔颜色
# 五角星大小
size = 50
draw_ptg(size)
turtle.exitonclick() # 停止绘制
if __name__ == '__main__':
main()
v4.0
利用递归函数绘制分形树
分型的几何学基本思想:客观事物具有自相似的层次结构。自相似性是指局部是整体成比例缩小的性质。如图中所示,四周柱状是中间柱状的成比例缩小形状。
分形树绘制流程如下:
分形树绘制操作分析:
知识点:
1.利用递归暂存参数性质
"""
功能:迭代绘制分形树
时间:2019年2月7日17:29:49
版本:1.0
"""
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)
turtle.backward(branch_length)
def main():
"""
主函数
"""
turtle.left(90)
turtle.penup()
turtle.backward(150)
turtle.pendown()
draw_branch(90)
turtle.exitonclick() # 停止绘制
if __name__ == '__main__':
main()
完整代码查看码云
网友评论