ASCII码 ASCII码

Python 分形算法代码详解

发布于:2022-03-31 10:44:56  栏目:技术文档

目录

  1. 前言什么是分形算法?
  2. 分形算法2.1 科赫雪花2.2 康托三分集2.3 谢尔宾斯基三角形2.4 分形树
  3. 总结
  4. 前言分形几何是几何数学中的一个分支,也称大自然几何学,由著名数学家本华曼德勃罗( 法语:BenoitB.Mandelbrot)在 1975 年构思和发展出来的一种新的几何学。

分形几何是对大自然中微观与宏观和谐统一之美的发现,分形几何最大的特点:

整体与局部的相似性: 一个完整的图形是由诸多相似的微图形组成,而整体图形又是微图形的放大。局部是整体的缩影,整体是局部的放大。

具有自我叠加性: 整体图形是由微图形不断重复叠加构成,且具有无限叠加能力。

什么是分形算法?所谓分形算法就是使用计算机程序模拟出大自然界的分形几何图案,是分形几何数学与计算机科学相融合的艺术。

由于分形图形相似性的特点,分形算法多采用递归实现。

  1. 分形算法2.1 科赫雪花科赫雪花是由瑞典数学家科赫在 1904 年提出的一种不规则几何图形,也称为雪花曲线。

分形图形的特点是整体几何图形是由一个微图形结构自我复制、反复叠加形成,且最终形成的整体图案和微图形结构一样。在编写分形算法时,需要先理解微图案的生成过程。

科赫雪花的微图案生成过程:

先画一条直线。科赫雪花本质就由一条直线演化而成。三等分画好的直线。取中间线段,然后用夹角为 60° 的两条等长线段替代。可在每一条线段上都采用如上方式进行迭代操作,便会构造出多层次的科赫雪花。科赫微图形算法实现:

使用 Python 自带小海龟模块绘制,科赫雪花递归算法的出口的是画直线。 import turtle ‘’’ size:直线的长度 level: 科赫雪花的层次 ‘’’ def koch(size, level): if n == 1: turtle.fd(size) else: for i in [0, 60, -120, 60]: turtle.left(i)

  1. # 旋转后,再绘制
  2. koch(size // 3, level - 1)

参数说明:

size: 要绘制的直线长度。level: 科赫雪花的层次。0 阶和 1 阶 科赫雪花递归流程: import turtle turtle.speed(100) def keline(line, n): if n == 0: turtle.fd(line) else: line_len = line // 3 for i in [0, 60, -120, 60]: turtle.left(i) ke_line(line_len, n - 1)

  1. # 原始直线长度
  2. line = 300
  3. # 移动小海龟到画布左下角
  4. turtle.penup()
  5. turtle.goto(-150, -150)
  6. turtle.pendown()
  7. # 1 阶科赫雪花
  8. di_gui_deep = 1
  9. ke_line(line, di_gui_deep)
  10. turtle.done()

2 阶科赫雪花:import turtleturtle.speed(100)def keline(line, n): if n == 0: turtle.fd(line) else: line_len = line // 3 for i in [0, 60, -120, 60]: turtle.left(i) ke_line(line_len, n - 1)

原始线长度

line = 300

移动小海龟画布左下角

turtle.penup()turtle.goto(-150, -150)turtle.pendown()

几阶科赫雪花

di_gui_deep = int(input(“请输入科赫雪花的阶数:”))while True:

  1. # 当多少科赫雪花围绕成一个圆周时,就构成一个完整的雪花造型
  2. count = int(input("需要几个科赫雪花:"))
  3. if 360 % count != 0:
  4. print("请输入 360 的倍数")
  5. else:
  6. break

for i in range(count): keline(line, di_gui_deep) turtle.left(360 // count)turtle.done() import turtle turtle.speed(100) def ke_line(line, n): if n == 0: turtle.fd(line) else: line_len = line // 3 for i in [0, 60, -120, 60]: turtle.left(i) ke_line(line_len, n - 1)

  1. # 原始线长度
  2. line = 300
  3. # 移动小海龟画布左下角
  4. turtle.penup()
  5. turtle.goto(-150, -150)
  6. turtle.pendown()
  7. # 几阶科赫雪花
  8. di_gui_deep = int(input("请输入科赫雪花的阶数:"))
  9. while True:
  10. # 当多少科赫雪花围绕成一个圆周时,就构成一个完整的雪花造型
  11. count = int(input("需要几个科赫雪花:"))
  12. if 360 % count != 0:
  13. print("请输入 360 的倍数")
  14. else:
  15. break
  16. for i in range(count):
  17. ke_line(line, di_gui_deep)
  18. turtle.left(360 // count)
  19. turtle.done()
相关推荐
阅读 +