Python数据结构15:turtle模块制图,画直线,正方形,星星,递归可视化:分形树,谢尔宾斯基三角形

article/2025/8/29 14:32:51

1. Python中的turtle模块制图

前面已经讲了递归的原理,这里用递归作图来直观的理解递归。
首先了解以下Python中用于作图的内置海龟作图系统turtle module。
Python内置,随时可用,以LOGO语言的创意为基础。
其意象为模拟海龟在沙滩上爬行而留下的足迹。

爬行:forward(n); backward(n)
转向:left(a); right(a)
抬笔放笔:penup(); pendown()
笔属性:pensize(s); pencolor( c )

1.1 画一条带方向的直线

import turtlet = turtle.Turtle()  # 开始作图
t.forward(100)  # 指挥海龟作图
turtle.done()  # 结束作图

1.2 画一个正方形

import turtlet = turtle.Turtle()for i in range(4):t.forward(100)  # 往前走100的距离t.right(90)  # 向右旋转90度turtle.done()

1.3 画一个星星

import turtlet = turtle.Turtle()
t.pencolor('red')  # 设置线条的颜色
t.pensize(5)  # 设置线条的粗细
for i in range(5):t.forward(100)t.right(144)
t.hideturtle()  # 将箭头隐藏
turtle.done()

1.4 画一个螺旋的图,用递归的方法

import turtlet = turtle.Turtle()def draw_spiral(line_len):  # line_len是最开始的线的长度if line_len > 0:  # 最小规模,当线的长度小于0时,结束。t.forward(line_len)t.right(90)draw_spiral(line_len - 5)  # 调用自身,每次线的长度减小,向最小规模演进。draw_spiral(100)turtle.done()

2. 用turtle画一个分形树

分形树就是每棵树都是由树干+左小树+右小树组成的,如图所示。最小的左(右)小树只有三根线。

import turtlet = turtle.Turtle()
t.left(90)
t.penup()  # 提笔,意思是,轨迹正常走,但是不画出来,可以避免画出不必要的路径
t.backward(100)  # 向箭头的反向走100
t.pendown()
t.pencolor('green')  # 树的颜色设置为绿色
t.pensize(2)  # 线的宽度def tree(branch_len):if branch_len > 5:  # 树干太短时,不画,递归结束t.forward(branch_len)  # 画树干t.right(20)  # 向右画长为20的右边(右子树的一部分)tree(branch_len - 15)  # 递归调用,画右子树t.left(40)  # 向左倾斜40°,即画向左的20°的左子树tree(branch_len - 15)  # 递归调用,画右子树t.right(20)  # 向右回正t.backward(branch_len)  # 海龟回到原来的位置tree(75)  # 画树干为75的分形树
t.hideturtle()
turtle.done()

3. 谢尔宾斯基三角形

谢尔宾斯基三角形,也具有与分形树类似的自相似性(就是每一个小部分和大部分的结构是相似的)。
谢尔宾斯基三角形是由3个尺寸减半的谢尔宾斯基三角形按照品字形拼叠而成。
真正的谢尔宾斯基三角形是无限个小三角组成的,因此我们只能做有限个谢尔宾斯基三角形。

引入一个degree的概念。
当只有一个三角形时,degree是0,这也是递归的结束条件。
当degree是1时,degree=1的三角形,由三个degree=0的三角形组成。
当degree是2时,degree=2的三角形,由三个degree=1的三角形组成。


以此类推。
在degree有限的情况下,degree=n的三角形,是由3个degree=n-1的三角形按照品字形拼叠而成。

代码:画一个degree = 5的谢尔宾斯基三角形

import turtlet = turtle.Turtle()def draw_triangle(points, color):  # 这个函数,用来画三角形。color参数,是自己设置的,填充三角形的颜色。t.fillcolor(color)  # 设置填充颜色t.penup()  # 抬笔t.goto(points['top'])  # 让小海龟朝着这个方向移动t.pendown()  # 落笔t.begin_fill()  # 开始填充颜色t.goto(points['left'])t.goto(points['right'])t.goto(points['top'])t.end_fill()  # 停止填充颜色def get_mid(p1, p2):  # 找两个点间的中点return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2def sierpinski(degree, points):colormap = ['blue', 'red', 'green', 'white', 'yellow', 'orange']draw_triangle(points, colormap[degree])  # 画等边三角形,不同度数的三角形颜色不同if degree > 0:  # 递归结束条件sierpinski(degree - 1,  # 朝递归结束条件演进{'left': points['left'],'top': get_mid(points['left'], points['top']),  # 减小规模,边长减半'right': get_mid(points['left'], points['right'])})sierpinski(degree - 1,{'left': get_mid(points['left'], points['top']),'top': points['top'],'right': get_mid(points['top'], points['right'])})sierpinski(degree - 1,{'left': get_mid(points['left'], points['right']),'top': get_mid(points['top'], points['right']),'right': points['right']})points = {'left': (-200, -100), 'top': (0, 200), 'right': (200, -100)}  # 三角形外轮廓的三个点
sierpinski(5, points)
turtle.done()

参考文献

本文的知识来源于B站视频 【慕课+课堂实录】数据结构与算法Python版-北京大学-陈斌-字幕校对-【完结!】,是对陈斌老师课程的复习总结


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

相关文章

关于谢尔宾斯基地毯的讲解

和谢尔宾斯基三角形一样,谢尔宾斯基地毯也是数学家谢尔宾斯基提出的一个分形图形,谢尔宾斯基地毯和谢尔宾斯基三角形基本类似,不同之处在于谢尔宾斯基地毯采用的是正方形进行分形构造,而谢尔宾斯基三角形采用的等边三角形进行分形…

基于马尔可夫链的谢尔宾斯基三角形(sierpinski)产生仿真

目录 1.算法仿真效果 2.MATLAB源码 3.算法概述 4.部分参考文献 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB源码 %***********

turtle库使用——谢尔宾斯基三角形

谢尔宾斯基三角形本质上是分形。所谓分形是一个几何图形,它可以分为许多部分,每个部分皆是整体的缩小版。这个三角形的建立概念如下: 1.建立一个等边三角形,这个三角形称0阶(order0)谢尔宾斯基三角形。 2…

分形之谢尔宾斯基(Sierpinski)地毯

前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫谢尔宾斯基于1916年提出的一种分形,是自相似集的一种。 谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅在于谢尔宾斯基地毯是以正方形而非等边三角形为基…

turtle递归作图绘制谢尔宾斯基地毯【详解】

了解谢尔宾斯基地毯 我们先从谢尔宾斯基三角形讲起: 谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。 以下是0到3阶的谢尔宾斯基三角形&#xff1a…

Python实验舱谢尔宾斯基地毯绘制教程

谢尔宾斯基地毯,和谢尔宾斯基三角形相似,下图就是谢尔宾斯基地毯 一,起始代码 p.width(3) p.speed(10) import turtle nint(input()) baseint(200/(3 ** n)) lengthbase * (3 ** n) p.pensize(0.1) turtle.tracer(False) p.pencolor(blue) p…

Matlab 谢尔宾斯基三角形

本文主要介绍了一种谢尔宾斯基三角形生产方法。谢尔宾斯基三角形是混沌与分形学里面的一个经典案例,能生成谢尔宾斯基三角形的方法很多,我采用的方法是取中点的方式,具体流程如下: 1.在任意三角形△ABC内或外任取一点P&#xff1…

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

谢尔宾斯基三角(Sierpinski)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585。 * 图一:完成后的 谢尔宾斯基三角

Python递归绘制谢尔宾斯基三角形

首先,回顾递归的概念: 一个函数不停地调用它本身,我们就认为这个函数使用了递归。 先来看一个谢尔宾斯基三角形的示例: 所以首先,我们需要一个方法,它能帮我们画三角形,在这里画一个三角形&am…

谢尔宾斯基地毯的讲解

谢尔宾斯基地毯是数学家谢尔宾斯基提出的一个分形图形,谢尔宾斯基地毯和谢尔宾斯基三角形基本类似,不同之处在于谢尔宾斯基地毯采用的是正方形进行分形构造,而谢尔宾斯基三角形采用的等边三角形进行分形构造。谢尔宾斯基地毯和它本身的一部分…

Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”

1、递归:在方法中调用本方法。 2、递归调用会无限循环下去,因此方法体中必须有结束方法的条件。返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”。 谢尔宾斯基地毯。 1&#xff…

谢尔宾斯基三角形:Python+turtle

本来觉得谢尔宾斯基三角形挺难的。分析以后,其实还是挺简单的。 挺好理解,供大家一起学习 """功能:绘制谢尔宾斯基三角形环境:python3.7日期:2019/1/14 21:49作者:指尖魔法师版本&#xf…

用PYTHON画谢尔宾斯基三角形(代码可复制)

今天我们来画一个谢尔宾斯基三角形。 好我们先看原图: 这是一个等边三角形,把每一条边平均分成两份,再把这三个焦点连起来,形成四个等边三角形,中间的一个不看,紧接着再继续按着刚刚的步骤走,就可以画出来…

Python实验舱谢尔宾斯基三角形绘制教程

三角形,大家应该再熟悉不过了。 上图是一个由四个小三角形拼成的大三角形,也叫谢尔宾斯基三角形。 谢尔宾斯基三角形还能继续画下去: 2阶(上图是1阶): 3阶: 5阶: 8阶: …

谢尔宾斯基三角新

谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维 1.取一个实心的三角形。(多数使用等边三角形) 2.沿三边中点的连线&am…

谢尔宾斯基三角形的讲解

谢尔宾斯基三角形是数学家谢尔宾斯基提出的⼀个分形图形,谢尔宾斯基三⻆形和谢尔宾斯基地毯基本类似,不同之处在于谢尔宾斯基三⻆形采⽤的是等边三⻆形进⾏分形构造,⽽谢尔宾斯地毯基采⽤的是正⽅形进⾏分形构造。 下面是我的代码展示&#x

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

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

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

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

谢尔宾斯基三角形

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

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

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