用python画科赫曲线,科赫曲线绘制 python代码,详解如何利用Python绘制科赫曲线

用python画科赫曲线,科赫曲线绘制 python代码,详解如何利用Python绘制科赫曲线

科赫曲线是一种像雪花一样的几何曲线,所以也叫雪花曲线。这是德勒姆曲线的一个特例。本文将使用Python语言实现这一曲线,需要的可以参考。

:

目录

1.递归1.1定义1.2数学归纳法2。递归的使用2.1阶乘2.2字符串求逆3。绘制科赫曲线3.1小结3.2绘制科赫曲线3.3科赫曲线的雪花效应3.4分形几何

1. 递归

1.1 定义

作为一个代码包,一个函数可以被其他程序调用,当然也可以被函数内部的代码调用。这种在函数定义中调用函数本身的方式叫做递归。就像一个人站在满是镜子的房间里,他看到的图像是递归的结果。递归在数学和计算机应用中非常强大,可以非常简洁地解决重要问题。

数学中有一个经典的递归例子叫做阶乘,通常定义如下:

n!=n(n- 1)(n- 2)…(1)

为了实现这个程序,可以通过简单的循环累加来计算阶乘。观察5!计算一下,如果去掉5,那么还剩下4!推广方面,n!=n(n-1)!实际上,这个关系式给出了阶乘的另一种表达方式:

当n=0时,n!=1;否则,n!=n(n - 1)!

这个定义说明0的阶乘定义为1,其他数的阶乘定义为这个数的阶乘乘以一个比这个数小的数。递归不是循环,因为每次递归都会计算一个小于它的阶乘,直到0!0!是一个已知值,被称为递归的基本示例。当递归结束后,你需要一个可以直接计算值的表达式。

阶乘的例子揭示了递归的两个关键特征:

(1)有一个或多个基本示例。基本示例不需要再次递归,它是一个明确的表达式。

(2)所有递归链都应该以一个或多个基本示例结束。

1.2 数学归纳法

数学归纳法和递归都是利用递归的原理,本质是一样的。数学归纳法在证明一个与自然数有关的命题P(n)时,采用以下步骤。

(1)证明当n取第一值n0时命题成立。

(2)假设当nk (k 0,k为自然数)时命题成立,证明当n=NK ^ 1时命题也成立。

综合(1)和(2),命题P(n)对所有自然数n( n n0)成立。

2. 递归的使用方法

2.1 阶乘

以阶乘计算为例,阶乘可以写成单独的函数,函数如下:

定义事实(n):

如果n==0:

返回1

否则:

返回n *事实(n - 1)

Num=eval(input('请输入整数:'))

print(fact(abs(int(num)))

fact()函数在其定义内引用自身,形成一个递归过程(比如第5行)。无限递归会耗尽计算资源,所以需要设计一个基例,使递归逐层返回。fact()函数通过if语句给出了n为0时的基本例子。当n==0时,fact()函数不再递归并返回值1。如果n!=0,递归返回n和n-1阶乘的乘积。

由于负数和小数不能通过减1达到递归的基本示例(n==0),代码的第八行通过abs()和int()函数将用户输入转换为非负整数。这个程序的输出效果如下:

请输入一个整数:5。

120

请输入整数:6.789。

720

遵循递归函数的语义,每次调用都会导致一个新函数的开始,表明它有一个局部变量值的副本,包括函数的参数。每次调用函数时,都会临时存储一份函数参数的副本。在递归中,每个函数都计算自己的参数,这些参数互不影响。当基例完成运算并返回值时,每个函数逐层完成运算,并将计算结果返回给调用者。

使用递归时,一定要注意基例的构造,否则递归返回失败就会报错。

2.2 字符串反转

对于用户输入的字符串,输出反转的字符串。

解决这个问题的基本思想是将字符串视为递归对象。长字符串由较短的字符串组成,每个小字符串也是一个对象。让我们把一个字符串想象成只由两部分组成:第一个字符和剩余的字符串。如果剩余的字符串与第一个字符交换,则整个字符串反转,代码如下:

定义反转:

返回反向((s[1:]) s[0])

观察该功能的工作过程。S[0]是第一个字符,s[1:]是剩余的字符串。把它们反过来连接,就可以得到倒串。执行这个程序,结果如下:

定义反转:

返回反向(s[1:]) s[0]

反向(“abc”)

返回反向(s[1:]) s[0]

[上一行又重复了996次]

递归错误:超过了最大递归深度

此错误表明系统无法执行reverse()函数创建的递归。这是因为reverse()函数没有基例,递归层数超过了系统允许的最大递归深度。默认情况下,递归调用到1000级时,Python解释器会终止程序。递归深度旨在防止无限递归错误。当用户编写的正确递归程序需要1000层以上时,可以通过以下代码设置:

导入系统

sys . setrecursionlimit(2000)# 2000是新的递归级别。

Reverse()超过了递归深度,因为没有设计基础用例。字符串倒置中的递归调用总是使用比以前更短的字符串,所以基例可以设计成字符串的最短形式,即空字符串。

完整的代码如下:

定义反转:

如果s==“”:

返回s

否则:

返回反向(s[1:]) s[0]

Str=input('请输入一个字符串:')

打印(反面(str))

程序执行结果如下:

请输入一个字符串:Python编程

编程程序nohtyP

3. 科赫曲线的绘制

3.1 概要

这是用递归画Koch曲线的例子,分形几何采用了类似递归的核心思想。

自然界中有很多图形是有规律的,符合一定的数学规律。例如,蜜蜂的蜂巢是天然的等边六边形。科赫曲线是众多经典数学曲线中非常著名的,它是由瑞典数学家冯。H-V-科赫(H-V-Koch)在1904年提出的。因为其形状类似雪花,所以又叫雪花曲线。

科赫曲线的基本概念和绘制方法如下:

n为正整数,代表Koch曲线的阶数和生成Koch曲线过程中的运算次数。Koch曲线的初始化阶为0,表示一条长度为L的直线,对于直线L,将其等分为三段,中间一段用边长为L/3的等边三角形的两条边代替,得到一阶Koch曲线,该曲线包含四段线段。进一步对每条线段重复同样的操作,得到二阶Koch曲线。重复同样的操作N次,得到N阶Koch曲线,如下图所示:

3.2 绘制科赫曲线

Koch曲线是分形几何的一个分支,其绘制过程体现了递归思想。绘图过程代码如下:

进口甲鱼

def koch(大小,n):

如果n==0:

turtle.fd(大小)

否则:

对于[0,60,-120,60]范围内的角度:

turtle.left(角度)

科赫(尺寸/3,n - 1)

def main():

turtle.setup(800,400)

Turtle.speed(0) #控制绘图速度。

turtle.penup()

turtle.goto(-300,-50)

turtle.pendown()

乌龟冥想(2)

Koch(600,6) # 0阶Koch曲线长度,阶

turtle.hideturtle()

主()

程序执行结果如下:

画N阶Koch曲线相当于在画笔方向0、60、-120和60处画n-1阶曲线。上面代码中的main()函数设置了一些初始参数。如果要控制绘制Koch曲线的速度,可以使用turtle.speed()函数来提高或降低速度。

3.3 科赫曲线的雪花效果

科赫曲线是从直线画出来的,如果从倒三角形开始会更有趣。用以下代码替换前面代码中的main()函数:

进口甲鱼

def koch(大小,n):

如果n==0:

turtle.fd(大小)

否则:

对于[0,60,-120,60]范围内的角度:

turtle.left(角度)

科赫(尺寸/3,n - 1)

def main():

turtle.setup(600,600)

龟速(1000)

turtle.penup()

turtle.goto(-200,100)

turtle.pendown()

乌龟冥想(2)

级别=5

科赫(400级)

turtle.right(120)

科赫(400级)

turtle.right(120)

科赫(400级)

turtle.hideturtle()

主()

程序执行结果如下:

3.4 分形几何

分形几何是数学的一个分支,以不规则几何为研究对象。基于分形自相似结构,通过无限递归展现复杂曲面下的内在数学秩序。分形几何不仅展示了数学之美,而且揭示了世界的本质,使人们重新审视世界:世界是非线性的,分形无处不在。

这篇关于如何用Python画Koch曲线的文章就到此为止了。有关Python Koch曲线的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: