2022-03-29

2022-03-29,第1张

分形几何 是几何数学中的一个分支,也称大自然几何学,由著名数学家本华曼德勃罗( 法语:BenoitB.Mandelbrot)在 1975 年构思和发展出来的一种新的几何学。

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

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

局部是整体的缩影,整体是局部的放大。

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

什么是分形算法?

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

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

2. 分形算法

2.1 科赫雪花

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

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

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

先画一条直线。科赫雪花本质就由一条直线演化而成。

三等分画好的直线。

取中间线段,然后用夹角为 60° 的两条等长线段替代。

可在每一条线段上都采用如上方式进行迭代 *** 作,便会构造出多层次的科赫雪花。

科赫微图形算法实现:

使用  Python  自带小海龟模块绘制,科赫雪花递归算法的出口的是画直线。

importturtle'''

size:直线的长度

level: 科赫雪花的层次

'''defkoch(size, level):ifn ==1:        turtle.fd(size)else:foriin[0,60, -120,60]:            turtle.left(i)# 旋转后,再绘制koch(size //3, level -1)

参数说明:

size:  要绘制的直线长度。

level:  科赫雪花的层次。

0 阶和 1 阶 科赫雪花递归流程:

importturtleturtle.speed(100)defke_line(line_, n):ifn ==0:        turtle.fd(line_)else:        line_len = line_ //3foriin[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 =1ke_line(line, di_gui_deep)turtle.done()

2 阶科赫雪花:

可以多画几个科赫雪花,布满整个圆周。

importturtleturtle.speed(100)defke_line(line_, n):ifn ==0:        turtle.fd(line_)else:        line_len = line_ //3foriin[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("请输入科赫雪花的阶数:"))whileTrue:# 当多型念少科赫雪花围绕成一个圆周时,就构成一个完整的雪花造型count =int(input("需要几个科赫雪花:"))if360% count !=0:print("请输入 360 的倍数")else:breakforiinrange(count):    ke_line(line, di_gui_deep)    turtle.left(360// count)turtle.done()

4 个 3 阶科赫雪花:  每画完一个后旋转 90 度,然后再绘制另一个。

6 个 3 阶科赫雪花:  每画完一个后,旋转 60 度再画另一个。

科赫雪花的绘制并不难,本质就是画直线、旋转、再画直线……

2.2 康托三分集

由德国数学家 格奥尔格·康托尔 在1883年引入,是位于一条线段上的一些点的集合。最常见的构造是 康托尔三分点集 ,由去掉一条线段的中间三分之一得出。

构造过程:

绘制一条给定长度的直线段,将它三等分,去掉中间一段,留下两段。

再将剩下的两段再分别三等分,同样各去掉中间一段,剩下更短的四段……

将这样的 *** 作一直继续下去,直至无穷,由于在不断分割舍弃过程中,所形成的线段数目越来越多,长度越来越小,在极限的情况下,得到一个离散的点集,称为康托尔点集。

import random

import turtle

def random_color():

  rgbl=[255,0,0]

  random.shuffle(rgbl)

  return tuple(rgbl)

def koch(size,n):

  if n==0:

      turtle.fd(size)

  else:

      for angle in [0,60,-120,60]:

          cc = random_color()

 悄枝历         turtle.pencolor(cc[0], cc[1], cc[2])

   启搜       turtle.left(angle)

          koch(size/3,n-1)

def main():

  turtle.colormode(255)

  turtle.setup(600,600)

  turtle.penup()

  turtle.goto(-200,100)

  turtle.pendown()

  turtle.pensize(2)

  level=4   #4阶科赫雪花,阶搭洞数

  koch(400,level)

  turtle.right(120)

  koch(400,level)

  turtle.right(120)

  koch(400,level)

  turtle.hideturtle()

  turtle.done()

main()

效果如图:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12429101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存