Python 与神奇的数学之分形几何

2022/1/13 22:34:17

本文主要是介绍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 与神奇的数学之分形几何的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程