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

article/2025/9/13 14:23:52

首先我们来绘制一个基本的3阶科赫雪花,由于和课上用的软件不一样,所以在课上看的代码只能当参考,实际比较繁琐。

代码如下

import turtle                          # 引入决解问题需要的工具——turtle作图包# 定义turtle画笔和画布的参数
def huabi():                           turtle.speed(0)                    # speed()参数有[0,10]:“0”特殊、代表最快速度,其余[1,10]值越大、速度越快turtle.pensize(2)                  # 设置画笔宽度为2turtle.setup(800,800, 100, 10)     # setup()参数有4个:前两个代表画布的“宽”和“高”,当数值为整数时、表示绝对像素大小,当小数时、表示站屏幕的比例。后两个可以省略,默认为屏幕中心位置,代表距离“屏幕左上角”的距离,单位是像素密度,turtle.penup()                     # 抬起画笔,之后的画笔动作、就不会产生图线turtle.goto(-300, 100)             # 以画布中心点为坐标原点(0,0),将画笔移动到坐标(-300,100)处turtle.pendown()                   # 落下画笔,以便画图# 定义“尖”
def koch(size, n):if n==0:                           #  0阶的科赫雪花曲线就是一条线,大小为输入的“size”turtle.fd(size)else:                              # 高阶科赫雪花曲线for i in [0, 60, -120, 60]:    # turtle在“尖”的四条线上改变的角度,分别为0°,60°,-129°,60°turtle.left(i)             # 对应上边四个角度,一共需要转4次弯,画出本阶的四条线,koch(size/3, n-1)          # 每个角度下的一个边,对应低一阶的客户雪花曲线的“尖”;至此完成函数本身的循环和复用,自动画出一个完整的n阶“尖”# 定义“边”
def sdkoch(size, n):                   # 完整的科赫雪花曲线由3个“边”组成,我们以上完成的是一个由“尖”组成的“边”,koch(size, n)turtle.right(120)                  # 2行代码一组,koch(size, n)turtle.right(120)koch(size, n)                      # 至此,得到完整的n阶科赫雪花曲线turtle.hideturtle()                # 把turtle的光标隐藏turtle.done()                      # 结束turtle# 定义main()主函数
def main(size, n):                     # 设定参数接口huabi()sdkoch(size, n)main(500, 2)                           # 在设定参数之后,调用主函数
import turtle
def koch(size, n):if n == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch(size/3, n-1)
def main():turtle.setup(600, 600)turtle.penup()turtle.goto(-200,100)turtle.pendown()turtle.pensize(2)level = 3            #三阶的科赫曲线koch(400, level)     turtle.right(120)      #转动120度,使得科赫曲线能围城一个三角形,形成最终的科赫雪花koch(400, level)turtle.right(120)koch(400, level)turtle.hideturtle()    #隐藏画笔
main()

效果如下 

接下来我们可以动用自己的创意来改进,可惜我失败了最后参考了许多大佬的代码和讲解,copy了这份代码

如下

import turtle
import timedef koch(size, n):  # 定义弯曲的直线使其有棱角if n == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:  # 每一次都对其进行合理的角度改变turtle.left(angle)koch(size / 3, n - 1)def main(n):global aglobal sif a == 1:turtle.color("black")  # 这边是控制画笔的颜色elif a == 2:turtle.color("purple")elif a == 3:turtle.color("blue")elif a == 4:turtle.color("Cyan")elif a == 5:turtle.color("green")elif a == 6:turtle.color("yellow")elif a == 7:turtle.color("orange")elif a == 8:turtle.color("red")if n != 0:a += 1turtle.penup()turtle.goto(-200 * (4 / 7) ** (s - n), 100 * (4 / 7) ** (s - n))# 每一次都是需要合理的等比例的扩大或是缩小turtle.pendown()turtle.pensize(2)level = 5koch(400 * (4 / 7) ** (s - n), level)  # 大小是一个一个试出来的# 不能超过setup的设定的范围 600,不然就越界了turtle.right(120)koch(400 * (4 / 7) ** (s - n), level)turtle.right(120)koch(400 * (4 / 7) ** (s - n), level)  # 注意这里koch一次就要转一次角度turtle.right(120)turtle.hideturtle()  # 隐藏画笔main(n - 1)a=1
s = int(input())  # 输入其中的科赫曲线的个数
turtle.setup(600, 600)
turtle.speed(0)
main(s)  # main(8)

效果如下

但是此代码绘制时间过于缓慢,本人需求广大网友指点迷津。 


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

相关文章

科赫雪花

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

ICCV 2019 | VIPL实验室5篇录取论文详解

上月&#xff0c;两年一度的国际计算机视觉大会ICCV 2019 公布了论文接收结果。今年投稿数量高达4303篇&#xff0c;与上一届 2143 篇相比&#xff0c;数量多出了将近一倍。最终全球仅1077篇论文被录取&#xff0c;录取率25.02%。中国科学院计算技术研究所视觉信息处理与学习研…

活体检测——SSDG

论文&#xff1a;《Single-Side Domain Generalization for Face Anti-Spoofing》 中国科学院计算技术研究所视觉信息处理与学习研究组&#xff08;VIPL实验室&#xff09;发布的单边域适应框架SSDG&#xff0c;其论文被CVPR2020 接收。Github链接&#xff1a;https://github.…

【ECCV 2016】Grid Loss及其在人脸检测中的应用

本文来源微信公众号&#xff1a;深度学习大讲堂&#xff0c;已授权发布。 作者&#xff1a;时学鹏&#xff0c;中科院计算所VIPL组15级硕士生。导师为山世光研究员。研究方向为基于深度学习的目标检测&#xff0c;特别是人脸检测。研发了VIPL课题组第五代人脸检测SDK。 原文&am…

Linux lvm(pv、vg、lv)操作命令收集

摘要&#xff1a;在Linux中&#xff0c;lvm逻辑卷应用非常广泛&#xff0c;vg卷组可以动态的调整空间大小&#xff0c;逻辑卷的扩容&#xff0c;可以轻松解决系统挂载点空间不足的问题。vg卷组创建的前提是设备分区标签必须为lvm。 一、物理卷操作命令 1、创建物理卷&#xff…