递归,与,科赫雪花曲线

article/2025/9/13 14:24:18

目录

壹:科赫雪花曲线(Koch Snowflake Curve)

贰:想法(ideas)

叁:代码实现(Code Implementation)

肆:打包(Packing)

伍:附录(Appendix)


壹:科赫雪花曲线(Koch Snowflake Curve)

        在正式开始本文的叙述前,我们需要先了解一些小知识——什么是“科赫雪花曲线”?

        1904年,瑞典数学家冯·科赫(H·V·Koch)提出了科赫曲线的概念。因为科赫曲线的形状类似雪花,科赫曲线也被称为雪花曲线。

科赫曲线的绘制方法:

  1. 正整数“n”代表科赫曲线的阶数,表示生成科赫曲线过程的操作次数
  2. 0阶科赫曲线,表示,一条长度为L的直线
  3. 1阶科赫曲线:
  4. 首先,将长度为L的直线三等分;其次,将中间的一段用边长为L/3的等边三角形另外两边代替;最后,1阶科赫曲线就是这样啦。
  5. 更高阶的科赫曲线以此类推(即,分别对已经等分的线段再进行等分)。

       一阶科赫曲线:

         二阶科赫曲线:

        

         "Okay, so much. Time to go ahead!"

        当"turtle库"“科赫雪花曲线”相遇,会发生怎样的作用呢?更精美的图形!

        科赫雪花曲线(5阶):

        5阶的科赫雪花曲线很漂亮,对吧?但,怎么觉得哪里有问题呢?哈哈,我想你应该发现了,上图是一个组合图形(狗头.png)。它是我们用科赫曲线(5阶)替换了等边三角形的三条边得到的。

       那,我们怎么绘制上图呢?


贰:想法(ideas)

        我们要调用哪些函数库呢?嗯……让我想好好想。

        既然要作图,那么"turtle库"是必须的;科赫雪花曲线的话,很有趣,我希望分享给朋友的".py"文件能够直接运行,那么……"pyinstaller库"!别的库,应该用不到了。

        那么,我需要用到哪些知识点呢?

        毋庸置疑的,关于"turtle库"的相关知识我要掌握;根据科赫曲线的定义,我们知道,绘图的过程是不断重复重复重复……的。那么我要用到"def"来帮我封装函数。“分别对已经等分的线段再进行等分”,是用到了“函数的递归”吗?

        欸,“函数的递归”是什么意思来着?我查查。

        (3000 years later……)

        “函数的递归——我们在定义的函数中再次调用该函数。即,我调用了我自己。”当我们在使用函数的递归时,需要特别注意一点:基例的构建。不然,函数一直在调用自己调用自己……我们还怎么得到结果呢?


叁:代码实现(Code Implementation)

        好啦,现在,让我们看一下怎么用代码来实现我们的思路吧~

        我们应该怎么做呢? 

# Created by Yuriko, all rights reserved!'''说明:壹:是,绘制“科赫雪花曲线”的,脚本。贰:函数“koch_curve(length,n)”中,“n”表示科赫曲线的阶数。且,“n”的取值为自然数。叁:推荐“n”,取值:[0,5]。'''#%%
# 调用函数库。import turtle as t#%%# 封装函数。def koch_curve(length,n):if n == 0:t.fd(length) # 基例。else:for x in [0,60,-120,60]:t.lt(x)koch_curve(length/3,n-1) # 递归,我调用了我自己。def draw_it():t.speed('fastest');t.color('lightblue')length = 300n = eval(input('需要绘制几阶的科赫雪花曲线?'))for x in range(3):koch_curve(length,n)t.rt(120)def main():t.setup(600,600)t.up(); t.goto(-150,100); t.down() # 调整画笔位置。draw_it() # 作图。t.hideturtle()t.done()#%%
# “F5”运行脚本。main()#%%
# To be continued.

        大功告成啦!好耶!!!

        接下来,就让我们的搬家公司("pyinstaller库")将代码打包吧~


肆:打包(Packing)

        以Anaconda环境为例:

        首先,在开始菜单(Start Menu)找到“命令提示符”;然后,分别敲入下行代码。

Microsoft Windows [版本 10.0.19043.2006]
(c) Microsoft Corporation。保留所有权利。C:\Users\will>conda activate(base) C:\Users\will>activate violet(violet) C:\Users\will>D:(violet) D:\>pyinstaller -F Koch_Curve.py

        然后,我们去“dist”文件夹找到打包好了的“Koch_Curve.exe”文件。

        运行ing……

        “啊这,啊这,啊这——出现了什么问题呢?”

        在冷静、思考、总结后,我们发现,问题出在“n = eval(input('需要绘制几阶的科赫雪花曲线?'))”。那好吧,我们还是内定“n”的值吧。

        n = 5

# Created by Yuriko, all rights reserved!'''说明:壹:是,绘制“科赫雪花曲线”的,脚本。贰:函数“koch_curve(length,n)”中,“n”表示科赫曲线的阶数。且,“n”的取值为自然数。叁:推荐“n”,取值:[0,5]。'''#%%
# 调用函数库。import turtle as t#%%# 封装函数。def koch_curve(length,n):if n == 0:t.fd(length) # 基例。else:for x in [0,60,-120,60]:t.lt(x)koch_curve(length/3,n-1) # 递归,我调用了我自己。def draw_it():t.speed('fastest');t.color('lightblue')length = 300# n = eval(input('需要绘制几阶的科赫雪花曲线?'))n = 5for x in range(3):koch_curve(length,n)t.right(120)def main():t.setup(600,600)t.up(); t.goto(-150,100); t.down() # 调整画笔位置。draw_it() # 作图。t.hideturtle()t.done()#%%
# “F5”运行脚本。main()#%%
# To be continued.

       一个建议,修改代码时,有时,“#”要比直接“Del”掉好。 

         大成功!


伍:附录(Appendix)

        不知道大家有没有遇到过这种情况:我们用"pyinstaller库"将代码文件打包好了,但是但是但是,运行“.exe”文件时,命令窗口一闪而过!灵异事件?!

        嗯,关于这个问题的解决很简单。

#%%
# 调用函数库。import os#%%
# Body.'''你的代码的主体部分'''os.system('pause')#%%
# To be continued.

        学会了吗?


http://chatgpt.dhexx.cn/article/Tfg2mSZd.shtml

相关文章

科赫雪花c语言程序设计,用 C 语言画科赫雪花

作者:Milo Yip 链接:https://zhuanlan.zhihu.com/p/24688522 1. 科赫雪花和科赫曲线 科赫曲线(Koch curve)是一个简单的分形(fractal)图形。瑞典数学家海里格冯科赫(Helge von Koch:https://en.wikipedia.org/wiki/Helge_von_Koch)于 1904 年…

科赫雪花绘制

绘制单边科赫雪花 效果图 代码 from turtle import * def koch(size,n): if n0: fd(size) else: for angle in [0,60,-120,60]: left(angle) koch (size/3,n-1) def main(): setup(800,400) penup() goto(-300,…

python的科赫雪花

科赫曲线是一种像雪花的几何曲线,所以又称为雪花曲线,它是de Rham曲线的特例。科赫曲线是出现在海里格冯科赫的论文中,是分形曲线中的一种。其形态似雪花,又称科赫雪花、雪花曲线。 #科赫雪花#递归函数 import turtle def koch(si…

python绘制科赫雪花and科赫雪花进阶版

首先我们来绘制一个基本的3阶科赫雪花,由于和课上用的软件不一样,所以在课上看的代码只能当参考,实际比较繁琐。 代码如下 import turtle # 引入决解问题需要的工具——turtle作图包# 定义turtle画笔和画布的参数…

科赫雪花

科赫曲线 一个过程进行不断地迭代 使用递归和海龟 科赫曲线的绘制(做一条直线,将中间的一段去掉,然后做一个凸起,形成科赫曲线) 递归思想:函数分支 递归链条:线段的组合 递归基例:初识线段 im…

Python实例8:科赫雪花小包裹(函数递归)

科赫曲线,也叫雪花曲线。绘制科赫曲线。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬…

科赫雪花小包裹实例详解

高大上的分形几何 分形几何是一种迭代的几何图形,广泛存在于自然界中(树叶,菜花)(这个东西的整体与他的局部具有很相似的特点) 分形几何中有一种特殊的曲线叫做科赫曲线,也叫雪花曲线 科赫曲…

分形之科赫(Koch)雪花

科赫曲线是一种分形。其形态似雪花,又称科赫雪花、雪花曲线.瑞典人科赫于1904年提出了著名的“雪花”曲线,这种曲线的作法是,从一个正三角形开始,把每条边分成三等份,然后以各边的中间长度为底边。分别向外作正三角形&…

用Python画科赫雪花

文章目录 科赫曲线飘雪三维飘雪 科赫曲线 科赫曲线因为十分像雪花,所以被成为雪花曲线,生成方式十分简单,总共分两步 画一个正三角形将正三角形的每个边三等分,然后以中间的那份为边,再画出个三角形。重复第二步。 …

关于科赫曲线和科赫雪花的讲解

这是我的第2篇文章。在讲新内容之前,我先要把以前递归函数没讲完的继续讲解: (recursion)就是在运行的时候调用自己,构成递归需具备的两个条件:一个就是调用自己,一个是有终止的条件。这两个条…

sql中的函数取余数

整数中取余数 前言取余数向上取整算法(此非彼)函数 sql语句 前言 向上取整,向下取整,或者换句话说 :有余数就1 ,没有就直接输出整数。 举个例子: 就比如一页10个,我21个数据&#x…

取模和求余运算

文章目录 背景探究总结 被除数 dividend 用 a 表示; 除数 divisor 用 b 表示; 商 quotient 用 q 表示; 余 remainder 用 rem 表示; 模 modulo 用 mod 表示。 背景 最近在一道 Java 习题中,看到这样的一道题&#xff1…

求任意整数模3的余数

在回答这个问题之前,首先思考另一个问题:为什么是模3的余数,而不是2或5? 那是因为3很特殊,求一个数模3的余数时,有一种巧妙地解法。 算法 算法是将这个数的各位数字加起来,重复这一过程&…

大数求余数

问题 提供两个数据 a,b,计算 a%b 的余数。 你可能会觉得这个问题很简单。我们用 C 为例,如果 a 和 b 可以在 long long 表示范围,那么这个问题非常简单。但是如果 a 超过了 C 中 long long 都超过的数据,我们要如何求…

求余数联系和赋值运算

算术和赋值运算符 算术运算符&#xff1a; (加)、 -(减)、 *(乘)、 /(除)、 %(求余) 赋值运算符&#xff1a;、 、 -、 *、 /、 % 加法运算代码及效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title&…

怎么用计算机做求余,怎样用计算器求余数

这样用计算器求余数&#xff1a; 假设是求10825的余数&#xff0c;计算器的的计算步骤如下&#xff1a; 步骤1、用计算器的数字键输入108&#xff0c;如下图&#xff1a; 步骤2、按计算器上的红框这个符号&#xff0c;如下图&#xff1a; 步骤3、用计算器的数字键输入25&#x…

余数取余定理

一&#xff1a;前言 今天我们课上学习了余数的定理&#xff0c;最早好像是出自于孙子的《中华剩余定理》。今天我们讲的就是关于余数的一些操作。 二&#xff1a;加法 (ab)%m;(m是除数&#xff0c;%是取余的意思)。 有些题目就是让我们求几个数的和去除以某些数的余数。如果把…

【Java编程进阶】Java语言基础入门篇

前言 你好&#xff0c;欢迎你阅读 Java 编程基础教程系列专栏。每个技术人都有个大厂梦&#xff0c;我觉得这很正常&#xff0c;并不是饭后的谈资&#xff0c;而是每个技术人的追求。像百度&#xff0c;阿里&#xff0c;腾讯这样的大厂技术氛围和技术规范度一定是优于一些创业…

Java基础入门(一)----基本语言

目录 1. 标识符 2.关键字 3.注释 4.数据类型 5.运算符 5.1 常用运算符 5.1 运算符优先级 1. 标识符 在Java语言中&#xff0c;对于变量&#xff0c;常量&#xff0c;函数&#xff0c;语句块和命名的统称为Java标识符。Java标识符是由数字&#xff0c;字母&#xff0c;下…