一、 问题描述

类似于分形树,分形三角形——谢尔宾斯基三角形同样是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585。对于谢尔宾斯基三角形的构造,可以先作一个正三角形,挖去一个“中心三角形”(即以原三角形各边的中点为顶点的三角形),然后在剩下的小三角形中又挖去一个“中心三角形”,我们用黑色三角形代表挖去的面积,那么白三角形为剩下的面积(我们称白三角形为谢尔宾斯基三角形)。如果用上面的方法无限连续地作下去,则谢尔宾斯基三角形的面积越趋近于零,而它的周长越趋近于无限大。

二、问题分析

在分形树——python递归中,因为分形图形每个部分都具有相同形状,因而我们从最基本的情况开始考虑。

这里,我们先定义try_1(),用turtle按第一个图案所示顺序画出“度”为1的三角形;接着定义tri_2(),即在三个正放的小三角形顶点处调用tri_1();同理定义tri_3()。我们很容易的可以想到递推关系——在“度”为n的三个正放的小三角形顶点处调用函数tri_n-1(),于是便可以画出图示谢尔宾斯基三角形。

三、算法设计

import turtlet = turtle

tri_1()、tri_2()、tri_3()

def tri_1(sd_le=200):   # se_le = side lenth 表示边长"""图示顺序画出三角形"""t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)def tri_2(sd_le=200):   """画出'度'为2的三角形"""tri_1(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri_1(sd_le // 2)  # 调用tri_1()t.forward(sd_le / 2)tri_1(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)def tri_3(sd_le=200):"""画出'度'为3的三角形"""tri_2(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri_2(sd_le // 2)   # 调用tri_2()t.forward(sd_le / 2)tri_2(sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)

tri()

def tri(n, sd_le=200):  # se_le = side lenth 表示边长if n == 1:t.width(de * 7)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)else:t.width(de * 7)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri(n - 1, sd_le // 2)t.forward(sd_le / 2)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)

和分形树一样,分形三角形的最内层实际上并没有下一层,于是最内层的调用和else下的方法相同,tri()可以优化为:

def tri(n, sd_le=600):  # se_le = side lenth 表示边长if n > 0:tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri(n - 1, sd_le // 2)t.forward(sd_le / 2)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)else:pass

四、完整代码

import turtlet = turtle
t.hideturtle()
t.speed(999)
t.color('grey')
t.width(3)
t.penup()
t.goto(0, 300)
t.pendown()def tri(n, sd_le=600):if n > 0:tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.left(120)tri(n - 1, sd_le // 2)t.forward(sd_le / 2)tri(n - 1, sd_le // 2)t.right(120)t.forward(sd_le / 2)t.right(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le / 2)t.left(120)t.forward(sd_le)t.left(120)t.forward(sd_le)t.right(120)else:passtri(5)
t.done()

五、运行结果

谢尔宾斯基三角形——python递归相关推荐

  1. python递归三角形_python 谢尔宾斯基三角形的递归实现

    import turtle def draw(points): # 根据三个坐标,画一个三角形 t.penup() t.goto(points['left']) t.pendown() t.goto( ...

  2. python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...

    插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...

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

    1. Python中的turtle模块制图 前面已经讲了递归的原理,这里用递归作图来直观的理解递归. 首先了解以下Python中用于作图的内置海龟作图系统turtle module. Python内置 ...

  4. 数据结构与算法(Python版)二十二:递归可视化(谢尔宾斯基三角形)

    谢尔宾斯基Sierpinski三角形 分形构造, 平面称谢尔宾斯基三角形, 立体称谢尔宾斯基金字塔 谢尔宾斯基三角形:作图思路 根据自相似特性, 谢尔宾斯基三角形是由3个尺寸减半的谢尔宾斯基三角形按照 ...

  5. 小白第一步|Java实现递归分形(以谢尔宾斯基三角形和勾股树为例)

    一个递归分形搞得我心态爆炸 于是 我一定要写个博客祭奠一下!!!!!! 首先回顾一下递归的几个要素: 1.return:往上回溯 2.调用自身:往下挖掘 3.设置条件:防止无限递归 4.递归操作:分析 ...

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

    1.递归:在方法中调用本方法. 2.递归调用会无限循环下去,因此方法体中必须有结束方法的条件.返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制"谢尔宾斯基 ...

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

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

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

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

  9. 混沌与分形(一):谢尔宾斯基三角形与门格海绵

    研究混沌运动,少不了对分形理论的探讨.分形:通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质. 本篇将从 ...

  10. turtle库使用教程 及 绘制 浪漫樱花 五角星 彩虹玫瑰 谢尔宾斯基三角形 实例

    目录 一.turtle简介 二.绘图坐标体系 三.笔画控制函数 四.形状绘制函数 五.颜色填充 六.浪漫樱花代码实例 七.五角星代码实例 八.彩虹玫瑰代码实例 九.谢尔宾斯基三角形代码实例 一.tur ...

最新文章

  1. python 列表算平均分_python平均列表
  2. 基于OpenCV创建视频会议虚拟背景
  3. 如何在一个空的datafame中append新的dataframe
  4. O(n)线性构造后缀树详解(一)
  5. pip install transformers出现拒绝访问
  6. Quartz调度原理
  7. eclipse中svn的各种状态图标详解
  8. oracle++dtcol,Oracle 中的 Incarnation 到底是个什么?实验操作篇
  9. 将MinimalLinux安装在U盘中
  10. Win10 查看开/关机历史记录、 删除管理员账户密码
  11. 使用esxcli命令升级VMware ESXi补丁
  12. LQ735kii针式打印机安装教程以及设置教程超级详细
  13. LaTex排版教程——入门篇
  14. Android中的UID和AppId
  15. echart地图飞线图
  16. 一个可供创业公司借鉴的持续集成技术实践
  17. LittleFs文件系统
  18. Packet Tracer 6.0基础知识
  19. QT简单实验——计算器
  20. 爬虫实战之爬虫漫画(有意外发现哦~嘿嘿)

热门文章

  1. centos7的mysql登录
  2. windows11右键恢复完整右键菜单
  3. openGL加载obj三维模型
  4. linux加载scsi硬盘驱动程序使用,linux scsi硬盘的安装
  5. STM32 USB主机通信连接中断过程
  6. FPGA编程语言--VHDL OR Verilog?
  7. Xilinx FPGA 编程技巧之常用时序约束详解
  8. SMARTS决策引擎:实时决策分析
  9. Excel VBA小游戏,上班摸鱼必备
  10. Flex笔记_格式化数据