目录
分形几何是对大自然中微观与宏观和谐统一之美的发现,分形几何最大的特点:
整体与局部的相似性: 一个完整的图形是由诸多相似的微图形组成,而整体图形又是微图形的放大。局部是整体的缩影,整体是局部的放大。
具有自我叠加性: 整体图形是由微图形不断重复叠加构成,且具有无限叠加能力。
什么是分形算法?所谓分形算法就是使用计算机程序模拟出大自然界的分形几何图案,是分形几何数学与计算机科学相融合的艺术。
由于分形图形相似性的特点,分形算法多采用递归实现。
分形图形的特点是整体几何图形是由一个微图形结构自我复制、反复叠加形成,且最终形成的整体图案和微图形结构一样。在编写分形算法时,需要先理解微图案的生成过程。
科赫雪花的微图案生成过程:
先画一条直线。科赫雪花本质就由一条直线演化而成。三等分画好的直线。取中间线段,然后用夹角为 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)
# 旋转后,再绘制
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)
# 原始直线长度
line = 300
# 移动小海龟到画布左下角
turtle.penup()
turtle.goto(-150, -150)
turtle.pendown()
# 1 阶科赫雪花
di_gui_deep = 1
ke_line(line, di_gui_deep)
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:
# 当多少科赫雪花围绕成一个圆周时,就构成一个完整的雪花造型
count = int(input("需要几个科赫雪花:"))
if 360 % count != 0:
print("请输入 360 的倍数")
else:
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)
# 原始线长度
line = 300
# 移动小海龟画布左下角
turtle.penup()
turtle.goto(-150, -150)
turtle.pendown()
# 几阶科赫雪花
di_gui_deep = int(input("请输入科赫雪花的阶数:"))
while True:
# 当多少科赫雪花围绕成一个圆周时,就构成一个完整的雪花造型
count = int(input("需要几个科赫雪花:"))
if 360 % count != 0:
print("请输入 360 的倍数")
else:
break
for i in range(count):
ke_line(line, di_gui_deep)
turtle.left(360 // count)
turtle.done()
相关推荐
© 2020 asciim码
人生就是一场修行