分形树绘制

V1.0 五角星绘制:

案例描述:

使用turtle库在Python中绘制简单图形

案例分析:

  • import turtle:引入绘制图形的turtle库
  • 利用turtle库中的函数进行编程——模型编程

上机实验:




python 如何 分时图 python画分形图_python

python 如何 分时图 python画分形图_python 如何 分时图_02

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. 绘图坐标体系

      

python 如何 分时图 python画分形图_python 如何 分时图_03

 


 V2.0 重复不同大小五角星的绘制:

案例分析:

加入循环操作绘制重复不同大小的五角星

上机实验:




python 如何 分时图 python画分形图_python

python 如何 分时图 python画分形图_python 如何 分时图_02

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的图形

案例分析:

自己调用自己

上机实验:




python 如何 分时图 python画分形图_python

python 如何 分时图 python画分形图_python 如何 分时图_02

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. 返回树枝节点

上机实验:




python 如何 分时图 python画分形图_python

python 如何 分时图 python画分形图_python 如何 分时图_02

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