切入正题之前,先让我们了解一下分形和分形几何.
分形(Fractal)一词,是 芒德勃罗 于1973年创造出来的,为不规则、支离破碎之意。其具有以非整数维形式充填空间的形态特征,通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
分形几何是一门以不规则几何形态为研究对象的几何学。相对于传统几何学的研究对象为整数维数,如,零维的点、一维的线、二维的面、三维的立体乃至四维的时空。分形几何的研究对象为非负实数维数,如 0.63、1.58、2.72、log2/log3(参见康托尔集)。由于不规则现象在自然界普遍存在,因此分形几何又被称为描述大自然的几何。
数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。
既然基于递归,分形几何与 python 就产生了密切的关系。
下面我们以科赫曲线为例,来展示一下这种关系的魅力。
科赫曲线(Koch curve)源自 海里格·冯·科赫 的论文,是一种像雪花的几何曲线,故又称为雪花曲线,它是de Rham曲线的特例。科赫曲线是比较典型的分形图形,具有严格的自相似特性。
给定线段 AB,科赫曲线可以由以下步骤生成:
- 将线段分成三等份(AC,CD,DB)
- 以CD为底,向外(内外随意)画一个等边三角形DMC
- 将线段CD移去
- 分别对AC,CM,MD,DB重复上述步骤
上述步骤已昭示了递归的基例(0阶,即线段AB)和链条(等边三角形的两边)。由此我们先以 3 阶科赫曲线为例,其代码为:
#3阶科赫曲线
from turtle import *
def koch(line,n):
if n==0:
fd(line)
else:
for angle in [0,60,-120,60]:
lt(angle)
koch(line/3,n-1)
def main():
setup(800,400)
pu()
goto(-300,-50)
pd()
width(2)
color('blue')
koch(600,3)
ht()
main()
结果如下:
上述图形已经具备了雪花的部分特征,3 段这样的曲线便可构成完美的雪花。
#科赫雪花
from turtle import *
def koch(line,n):
if n==0:
fd(line)
else:
for angle in [0,60,-120,60]:
lt(angle)
koch(line/3,n-1)
def main():
setup(1000,600)
pu()
goto(-200,100)
pd()
width(2)
color('blue')
level=3
koch(400,level)
rt(120)
koch(400,level)
rt(120)
koch(400,level)
ht()
main()
3 阶科赫雪花结果如下,具有 192 个顶点:
是不是很炫呢?!
随着 level 也即科赫阶数的增加,科赫雪花的花瓣愈趋细化,顶点也愈趋增多。
这是 level=5 时的科赫雪花,具有 3072 个顶点。
综上可见,科赫雪花是以等边三角形三边生成的科赫曲线组成的。每条科赫曲线的长度可以是无限大,是连续而无处可微的曲线。其特点可归纳为:
- 曲线任何处不可导,即任何地点都是不平滑的
- 总长度趋向无穷大
- 曲线上任意两点沿边界路程无穷大
- 面积有限(由此产生一个匪夷所思的悖论:”无穷大”的边界,包围着有限的面积。)
是不是很神奇呢?!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/106985.html