关于分形几何,让我们先看看度娘是怎么说的。
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
分形(Fractal)一词,是芒德勃罗于1973年创造出来的,其原意具有不规则、支离破碎等意义。
分形几何是一门以不规则几何形态为研究对象的几何学。相对于传统几何学的研究对象为整数维数,如,零维的点、一维的线、二维的面、三维的立体乃至四维的时空。分形几何的研究对象为非负实数维数,如0.63、1.58、2.72、log2/log3(参见康托尔集)。由于不规则现象在自然界普遍存在,因此分形几何又被称为描述大自然的几何。
数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。
既然基于递归,分形几何与python就产生了密切的关系。
下面我们以科赫曲线为例,来展示一下这种关系的魅力。
科赫曲线是一种像雪花的几何曲线,故又称为雪花曲线,它是de Rham曲线的特例。科赫曲线源自海里格·冯·科赫的论文,是分形曲线中的一种。
给定线段AB,科赫曲线可以由以下步骤生成:
上述步骤已昭示了递归的基例(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个顶点。
综上可见科赫雪花是以等边三角形三边生成的科赫曲线组成的。每条科赫曲线的长度可以是无限大,是连续而无处可微的曲线。其特点可归纳为:
是不是很神奇呢?!