分形树绘制
V1.0 五角星绘制:
案例描述:
使用turtle库在Python中绘制简单图形
案例分析:
- import turtle:引入绘制图形的turtle库
- 利用turtle库中的函数进行编程——模型编程
上机实验:
1 """
2 作者:王鑫正
3 功能:五角星的绘制
4 版本:1.0
5 日期:2018年9月17日
6 """
7 import turtle
8
9
10 def main():
11 """
12 主函数
13 """
14 # 计数器
15 count = 1
16
17 while count <= 5:
18 turtle.forward(100)
19 turtle.right(144)
20 count = count + 1
21
22 turtle.exitonclick()
23
24
25 if __name__ == '__main__':
26 main()
View Code
补充说明:
1. turtle库:
- 没有显示的input()与output()
- 没有赋值语句
- 大部分语句为<a>.<b>()的形式
- 表示使用<a>中的方法<b>()
- 调用函数库<a>中的函数<b>()
2. 形状绘制函数
- turtle.forward(distance):画笔向前移动distance距离
- turtle.backward(distance):画笔向后移动distance距离
- turtle.right(degree):绘制方向向右旋转degree度
- turtle.exitonclick():点击关闭图形窗口
3. 绘图坐标体系
V2.0 重复不同大小五角星的绘制:
案例分析:
加入循环操作绘制重复不同大小的五角星
上机实验:
1 """
2 作者:王鑫正
3 功能:五角星的绘制
4 版本:2.0
5 日期:2018年9月17日
6 新增功能:加入循环操作绘制重复不同大小的五角星
7 """
8 import turtle
9
10
11 def drwa_pentagram(size):
12 """
13 绘制五角星
14 """
15 count = 1
16 while count <= 5:
17 turtle.forward(size)
18 turtle.right(144)
19 count += 1
20
21
22 def main():
23 """
24 主函数
25 """
26
27 turtle.penup()
28 turtle.backward(200)
29 turtle.pendown()
30
31 size = 50
32
33 while size <= 500:
34
35 # 调用绘制五角星函数
36 drwa_pentagram(size)
37 # size = size + 10
38 size += 10
39
40 turtle.exitonclick()
41
42
43 if __name__ == '__main__':
44 main()
View Code
补充说明:
1. "size = size + 1" 等同于 “size += 1”
2. 画笔控制函数:
- turtle.penup() 抬起画家,之后移动画笔不绘制形状
- turtle.pendown() 落下画笔,之后移动画笔绘制形状
- turtle.pensize() 设置画笔宽度
- turtle.pencolor() 设置画笔颜色
V3.0 使用迭代函数重复不同大小五角星的绘制:
案例描述:
将函数与循环结合(递归函数)绘制2.0的图形
案例分析:
自己调用自己
上机实验:
1 """
2 作者:王鑫正
3 功能:五角星的绘制
4 版本:3.0
5 日期:2018年9月17日
6 新增功能:加入循环操作绘制重复不同大小的五角星
7 新增功能:使用迭代函数绘制重复不同大小的五角星
8 """
9 import turtle
10
11
12 def draw_pentagram(size):
13 """
14 绘制五角星
15 """
16 count = 1
17 while count <= 5:
18 turtle.forward(size)
19 turtle.right(144)
20 count += 1
21
22
23 def draw_recursive_pentagram(size):
24 """
25 迭代绘制五角星
26 """
27 # 计数器
28 count = 1
29 while count <= 5:
30 turtle.forward(size)
31 turtle.right(144)
32 count += 1
33
34 # 五角星绘制完成,更新参数
35 size += 10
36 if size <= 100:
37 draw_recursive_pentagram(size)
38
39
40 def main():
41 """
42 主函数
43 """
44
45 turtle.penup()
46 turtle.backward(200)
47 turtle.pendown()
48 turtle.pensize(2)
49 turtle.pencolor('red')
50
51 size = 50
52 draw_recursive_pentagram(size)
53
54 turtle.exitonclick()
55
56
57 if __name__ == '__main__':
58 main()
View Code
补充说明:
1. 递归函数:
- 函数定义中调用函数自身的方式称为递归
- 能够非常简洁地解决重要问题
- 每次函数调用是,函数参数会临时存储,相互没有影响
- 达到终止条件时,各函数逐层结束运算,返回计算结果
- 要注意终止条件的构建,否则递归无法正常返回结果
V4.0 分形树的绘制
案例描述:
- 利用递归函数绘制分形树(fractal tree)
- 分形几何学的基本思想:客观事物具有自相似的层次结构,局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似性,成为自相似性。自相似性是指局部是整体成比例缩小的性质。
案例分析:
- 绘制右侧树枝
- 返回树枝节点
- 绘制左侧树枝
- 返回树枝节点
上机实验:
1 """
2 作者:王鑫正
3 功能:利用递归函数绘制分形树
4 版本:1.0
5 日期:2018年9月17日
6 """
7 import turtle
8
9
10 def draw_branch(branch_length):
11 """
12 绘制分形树
13 """
14 if branch_length > 5:
15 # 绘制右侧树枝
16 turtle.forward(branch_length)
17 print('向前', branch_length)
18 turtle.right(20)
19 print('右转', 20)
20 draw_branch(branch_length - 15)
21
22 # 绘制左侧树枝
23 turtle.left(40)
24 print('左转', 20)
25 draw_branch(branch_length - 15)
26
27 # 返回之前的树枝
28 turtle.right(20)
29 print('右转', 20)
30 turtle.backward(branch_length)
31 print('向后', branch_length)
32
33
34 def main():
35 """
36 主函数
37 """
38 turtle.penup()
39 turtle.setpos(0,-100)
40 turtle.pendown()
41 turtle.color('brown')
42 turtle.left(90)
43 draw_branch(100)
44 turtle.exitonclick()
45
46
47 if __name__ == '__main__':
48 main()
View Code