Python 与神奇的数学之分形几何
作者:互联网
关于分形几何,让我们先看看度娘是怎么说的。
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
分形(Fractal)一词,是芒德勃罗于1973年创造出来的,其原意具有不规则、支离破碎等意义。
分形几何是一门以不规则几何形态为研究对象的几何学。相对于传统几何学的研究对象为整数维数,如,零维的点、一维的线、二维的面、三维的立体乃至四维的时空。分形几何的研究对象为非负实数维数,如0.63、1.58、2.72、log2/log3(参见康托尔集)。由于不规则现象在自然界普遍存在,因此分形几何又被称为描述大自然的几何。
数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。
既然基于递归,分形几何与python就产生了密切的关系。
下面我们以科赫曲线为例,来展示一下这种关系的魅力。
科赫曲线是一种像雪花的几何曲线,故又称为雪花曲线,它是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)
up()
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)
up()
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个顶点。
综上可见科赫雪花是以等边三角形三边生成的科赫曲线组成的。每条科赫曲线的长度可以是无限大,是连续而无处可微的曲线。其特点可归纳为:
- 曲线任何处不可导,即任何地点都是不平滑的
- 总长度趋向无穷大
- 曲线上任意两点沿边界路程无穷大
- 面积有限(由此产生一个匪夷所思的悖论:"无穷大"的边界,包围着有限的面积。)
是不是很神奇呢?!
标签:Python,曲线,雪花,几何,分形,koch,科赫,神奇 来源: https://blog.csdn.net/iprobobo/article/details/122463544