Python 与神奇的数学之科赫曲线

导读:本篇文章讲解 Python 与神奇的数学之科赫曲线,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        切入正题之前,先让我们了解一下分形和分形几何.

        分形(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()        
            

        结果如下:

Python 与神奇的数学之科赫曲线

        上述图形已经具备了雪花的部分特征,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 个顶点:

Python 与神奇的数学之科赫曲线

        是不是很炫呢?! 

         随着 level 也即科赫阶数的增加,科赫雪花的花瓣愈趋细化,顶点也愈趋增多。

Python 与神奇的数学之科赫曲线

        这是 level=5 时的科赫雪花,具有 3072 个顶点。

        综上可见,科赫雪花是以等边三角形三边生成的科赫曲线组成的。每条科赫曲线的长度可以是无限大,是连续而无处可微的曲线。其特点可归纳为:

  • 曲线任何处不可导,即任何地点都是不平滑的
  • 总长度趋向无穷大
  • 曲线上任意两点沿边界路程无穷大
  • 面积有限(由此产生一个匪夷所思的悖论:”无穷大”的边界,包围着有限的面积。)

        是不是很神奇呢?!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/106985.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!