谢尔宾斯基三角用Python做,你知道吗?

article/2025/8/29 14:21:41

大家好,我叫王若冲。因为我妈叫我冲姐,所以你们也可以这么叫我。今天是我的第一篇文章,就给大家讲谢尔宾斯基三角的代码吧。如果你既想要试一试,又懒得自己写代码,那么原代码就在下面。*注意,这次我用的软件叫做IDLE(Python 3.7 64-bit) ,建议大家用原软件去试。

定一个规矩:如果你只是随便看看,那么还希望你帮我找一找缺点,在今后我会加油填上的!

首先,谢尔宾斯基三角是什么?给大家看一张图,你马上就会知道。

 没错,直白地说就是分三角形。但是,再仔细看,你会发现小三角形是如何分割的。我们往下看......

假设这个大三角形是abc,那么a与b有一个中点,我们就设它为d。同样,将b与c,c与a的中点取出,分别设为e和f。那么,把这三个中点连接,就会把大三角形abc平均分割成4个同样的较小的三角形,分别为adc、deb、fec和def。把中间的三角形def放在一旁,用同样的方法分割剩下的三个三角形,以此类推,直到你想要停歇为止。

懂得了它的原理,代码就特别简单啦。请看:

 import turtle as p
p.width(3)
p.speed(10)
p.setheading(120)
p.hideturtle()

def get_midpoint(a,b):
    ax,ay=a
    bx,by=b
    return(ax+bx)/2,(ay+by)/2

def draw_triangle(a,b,c):
    ax,ay=a
    bx,by=b
    cx,cy=c
    p.penup()
    p.goto(ax,ay)
    p.pendown()
    p.goto(bx,by)
    p.goto(cx,cy)
    p.goto(ax,ay)

def draw_siepinski(triangle,depth):
    a,b,c=triangle
    draw_triangle(a,b,c)
    if depth==0:
        return;
    else:
        d=get_midpoint(a,b)
        e=get_midpoint(b,c)
        f=get_midpoint(c,a)
        draw_siepinski([a,d,f],depth-1)
        draw_siepinski([d,b,e],depth-1)
        draw_siepinski([f,e,c],depth-1)

triangle=[[-200,-100],[0,200],[200,-100]]
draw_siepinski(triangle,5)
p.done()

第一部分:提前准备

Python可以说它是一个老板,它自己到没有什么本事,但有本事的亲戚特别多。这个亲戚就是Python从外面调用到自己这儿的一个包,你想什么时候用,你就把它请出来,就可以用了。此处,import就是引入的意思,明摆着就是说把turtle这个包调用过来。为了简便,就把它写成p。其它代码就是小乌龟(turtle)的一些设置。

第二部分:取中点函数

在二维图形中,横轴为x,竖轴为y。这里就是定义一个函数来确定ab的中点的确切位置。

第三部分:画大三角形函数

没什么特别,主要是画了一个大三角形(我先前说的abc),用函数表达是为了更迅速、精确地找到位置。

第四部分(***重点!***):往里分割三角形函数

这里就是重点啦!还记得我之前说谢尔宾斯基三角的分割规律吗?这个函数实现了它。我们一步一步理解。

1.参数。此函数中有两个参数,一个是在定义这个函数时肚子里的triangle,就是abc大三角形。另一个叫depths,理解上是深度的意思,在这里就指分割三角形的阶数,一共要分几层。

2.if...else...结构。Python中有3大结构,分别为循环结构、顺序结构、选择结构。if...else...就是选择结构,简单说就是给你多个选择,你选了哪个你就做哪个,不然你就做哪个。把代码解释一遍,就是如果阶数为0,那么就别做了,要不然你就画相应阶数的三角形。

3.递归。在draw_siepinski()函数中,你会发现里面出现了一个自己!这就是递归,自己调用自己。那么你一定会问,如果自己一直调用自己,会不会没完没了了呢?那就不对了,因为每一个递归都有一个终止条件,让它到一定的条件后适可而止。这里,if中的条件(depths=0)则为终止条件,让它阶数到0以后就别画了。

4.三角形+取中点。之前我不是把那个大三角形设置为abc吗,接着取三条边的中点吗?其实你每分完一次,那个准备被分的三角形都可以称之为abc,那些三角形的中点都可以叫d,e,f。并且它每分完一次,它的阶数就减一,一直延续到depths等于0为止。

第五部分:运用函数

将函数运用起来,就可以画出来了哟!

分析完了代码,是不是学到了很多知识?那么就赶紧动一动手,做起来吧! 


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

相关文章

学习Python中turtle模块的基本用法(4:绘制科赫曲线和谢尔宾斯基三角形)

科赫曲线和谢尔宾斯基三角形是常见的分形图形(详细介绍见参考文献1),本文使用turtle库绘制这两类图形。 科赫曲线 科赫曲线的详细介绍见参考文献2,其中的绘图思路是“画正三角形,并把每一边三等分,取三等分后的一边中…

谢尔宾斯基三角形

谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出 取一个实心的三角形。(多数使用等边三角形)沿三边中点的连线,将它分成四个小三角形。去掉中间的那…

混沌分形之谢尔宾斯基(Sierpinski)

本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形。 (1)谢尔宾斯基三角形 给三角形的3个顶点,和一个当前点,然后以以下的方式进行迭代处理: a.随机选择三角形的某一个顶点,计算出它与当前点的中点位置…

关于谢尔宾斯基三角形(Sierpinski triangle)的讲解

谢尔宾斯基三角形(Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585。 谢尔宾斯基(Sierpinski)三角形 1.画一个(正&…

谢尔宾斯基三角形——python递归

一、 问题描述 类似于分形树,分形三角形——谢尔宾斯基三角形同样是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585。对于谢尔宾斯基三角形的构造,可以先作一个正三角形&#x…

Redis的RDB和AOP总结

目录 1.RDB和AOF是什么 2.RBD 2.1 配置参数 2.1.1 配置文件位置 2.1.2 save 2.1.3 stop-writes-on-bgsave-error 2.1.4 rdbcompression 2.1.5 rdbchecksum 2.1.6 dbfilename 2.1.7 dir 2.2 fork 2.3 如何触发RDB快照 2.3.1 配置文件中默认的快照配置 2.3.2 客户端使用命令sav…

redis RDB设计与实现

redis RDB设计与实现 文章目录 redis RDB设计与实现RDB功能RDB文件的创建和保存SAVE 和 BGSAVERDB保存冲突RDB文件的载入自动保存 RDB 文件结构 RDB功能 为了使Redis储存在内存中的数据库状态保存到磁盘里面防止丢失,Redis提供了RDB持久化功能,将Redis内…

比redis-rdb-tools快10倍的rdb分析工具

背景 为了满足快速分析rdb的情况,对rdr进行测试调研。 测试环境 测试机器:本机macbook pro 工具:rdr,redis-rdb-toolsrdb 文件:dump_7709.rdb,Redis实例大小3G,rdb文件大小1G git地址&…

Redis持久化之RDB原理

Redis持久化之RDB 一.RDB文件作用二. 触发条件三、执行流程1、总体流程2、fork实现复制原理 四、RDB文件五、 启动时加载六、 RDB常用配置总结七、优缺点1、优点2、缺点 个人复习笔记一.RDB文件作用 RDB持久化是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化)&a…

Redis RDB持久化

文章目录 一、持久化简介二、数据快照RDB1. save指令2. RDB文件相关配置验证save后数据保存在了rdb文件验证重启服务后,程序会从rdb文件中恢复数据到内存 3. bgsave指令4. 配置自动持久化5. RDB三种启动方式对比6. rdb特殊启动形式7. RDB优缺点 一、持久化简介 什么…

Redis 持久化与故障恢复之rdb

一、摘要 老生常谈一下吧,redis持久化分为rdb和aof两种模式,本篇先说一说rdb模式吧,共分为三部分:1:如何触发rdb持久化, 2:rdb持久化源码, 3:rdb文件解析。 ps:本文基于r…

【Redis】Redis持久化之RDB详解(Redis专栏启动)

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司…

redis持久化之rdb

redis持久化之rdb RDB相关配置rdb快照的触发条件rdb快照过程rdb文件结构rdb和aof文件的加载顺序 Redis的RDB持久化方式是指将某个时刻的内存数据进行快照,生成.rdb文件可以用于恢复快照时刻redis的内存数据。 RDB相关配置 我们可以在redis.conf中进行rdb相关的配置…

redis之AOF和RDB持久化

写在前面 redis数据存储在内存,为了避免服务器重启或者是宕机导致数据全部丢失,提供了数据持久化机制,有AOF(Append Only File)和RDB,接下来我们分别看下。 1:AOF 如下是我本地环境生成aof文件: 1.1&am…

AOFRDB

序言 主要用于查看不同备份模式可以调优的一些方式. RDB: Redis服务器在规定时间内将内存中的数据保存到指定路径的文件中,服务器重启的时候直接将RDB文件读取到内存中AOF:Redis服务器以日志的形式追加所有的REDIS操作,服务器重启的时候读取AOF文件依次执行一遍. 关于RDB最主…

RDB持久化触发机制

RDB持久化 触发机制 手动触发 手动触发分别对应save和bgsave命令: save命令:同步,在主线程中保存快照;阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上…

Redis RDB 和 AOF

导读 RDB 和 AOF 对比: 持久化方式选择 如果对数据安全性要求极高,应该同时使用两种持久化方式。 如果可以承受若干时间内的数据丢失,可以只使用 RDB 持久化。 不建议只使用 AOF 持久化,因为定时生成 RDB 快照(s…

java读取rdb_剖析Redis RDB文件

通过redis-cli中执行save或者bgsave可以得到RDB文件(文件名由配置文件中dbfilename指定,例如dbfilename "dump.rdb"),这个文件包含Redis实例中全量的数据,那么dump.rdb的文件格式大概是什么样的呢? RDB文件定义 获取RDB…

Redis RDB文件解析

Redis RDB是什么 Redis rdb是Redis快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据&#xff0c…

RDB 持久化详解

文章目录 持久化的执行SAVE:阻塞服务器并创建RDB文件BGSAVE:以非阻塞方式创建RDB文件通过配置文件自动创建RDB文件查看最近持久化时间 RDB优化配置1. save2. stop-write-on-bgsave-error3. rdbcompression4. rdbchecksum5. sanitize-dump-payload6. dbfi…