谢尔宾斯基三角形本质上是分形。所谓分形是一个几何图形,它可以分为许多部分,每个部分皆是整体的缩小版。这个三角形的建立概念如下:

1.建立一个等边三角形,这个三角形称0阶(order=0)谢尔宾斯基三角形。

2.将三角形各边中点连接,称1阶谢尔宾斯基三角形。

3.中间三角形不变,将其他3个三角形各边中点连接,称2阶谢尔宾斯基三角形。

4.使用递归式函数概念,重复上述步骤,即可产生3阶、4阶级、或更高阶的谢尔宾斯基三角形。

# 谢尔宾斯基三角形,输入三角形的阶数,然后可用Turtle()绘出此三角形。
import time
import turtle# 依据特定阶级数绘制Sierpinski三角形
def sierpinski(order, p1, p2, p3):if order == 0:# 将3个点连接绘制成三角形drawLine(p1, p2)drawLine(p2, p3)drawLine(p3, p1)else:# 取得三角形各边长的中点p12 = midpoint(p1, p2)p23 = midpoint(p2, p3)p31 = midpoint(p3, p1)# 递归调用处理绘制三角形sierpinski(order - 1, p1, p12, p31)  # p1 、p2、p3三角形各中点连线得四个三角形,此处处理上面一个小三角形部分sierpinski(order - 1, p12, p2, p23)  # 此处处理左下角的一个小三角形部分sierpinski(order - 1, p31, p23, p3)  # 此处处理右下角的一个小三角形部分# 绘制p1和p2之间的线条
def drawLine(p1, p2):t.penup()t.setpos(p1[0], p1[1])t.pendown()t.setpos(p2[0], p2[1])t.penup()t.seth(0)# 传回2点的中间值
def midpoint(p1, p2):p = [0, 0]p[0] = (p1[0] + p2[0]) / 2p[1] = (p1[1] + p2[1]) / 2return pt = turtle.Pen()
p1 = [0, 86.6]
p2 = [-100, -86.6]
p3 = [100, -86.6]
order = eval(input("输入阶数:"))
sierpinski(order, p1, p2, p3)
time.sleep(3)

eval()函数
eval(<字符串>)能够以Python表达式的⽅式解析并执⾏字符串,并将返回结果输出。eval()函数将去掉字符串的两个引号,将其解释为⼀个变量。
作⽤:
a. 处理数字:
单引号,双引号,eval()函数都将其解释为int类型;三引号则解释为str类型。

b.处理字符串类型的字符串:
对于eval()括号中的的字符串(⾮数字),如果字符串带的是单引号或者是双引号都会引起NameError,这是因为eval()函数在处理字符串时会去掉其两个引号。正确应该使⽤⼀个单引号包含⼀个双引号组成的三引号来包含字符串。

这里的eval()函数也可以直接使用int(),也就是将输入的数字字符串转为整型数字。

绘图效果:

turtle库使用——谢尔宾斯基三角形相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 谢尔宾斯基三角形GUI

    源代码:https://github.com/ltoddy/Python-useful sierpinskitriangle.py from tkinter import *class Sierpin ...

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

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

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

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

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

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

  10. 小练手:用Canvas绘制谢尔宾斯基三角形

    转载<小练手:用Canvas绘制谢尔宾斯基三角形> 补充 作者第二种画法的完整程序: PS:修改function SierpinskiTriangle(p,len,depth = 9)中d ...

最新文章

  1. POJ 1170 Shoping Offers(IOI 95)
  2. java中的类型转换
  3. 不同情况通知执行的顺序
  4. python终止线程_Python里怎么终止一个线程
  5. python设计模式22-模板模式
  6. WebPack 简明学习教程
  7. ASP.NET实现PDF大文件的浏览
  8. 【MCMC】基于贝叶斯优化的自适应MCMC算法仿真
  9. vuereact视频截图
  10. MSG数据(EUMETSAT)和GOES数据(NOAA)下载
  11. ios appstore 上架应用被拒绝原因
  12. php 后台文章分页功能,php简单实例:文章分页功能
  13. 网络威胁情报git【全面】
  14. iview在table中添加图片
  15. 使用IDEA编译之配置文件出现乱码(properties、yml、xml)
  16. 特斯拉如何恢复出厂设置_iphone如何恢复手机出厂设置
  17. The server time zone value .. is unrecognized or represents more than one time zone
  18. 作为程序员面试官的3点建议
  19. 项管(十六)——文档管理、配置管理、知识管理、变更管理
  20. 后台弹窗,弹窗跳转页面

热门文章

  1. MySQL中文乱码解决方案
  2. Spring+SpringMVC+MyBatis+JQ+BootStrap练习
  3. vant-ui 有赞ui官网打不开?
  4. centos7加入Windows域
  5. yylabel html不显示图片,YYLabel富文本
  6. python for line in sys.stdin读文件,按行处理
  7. java中如何获取一个字符串的长度呢?
  8. Android实现思维导图功能,Android打造思维导图
  9. 雨人网络E卡通免费上网的方法
  10. Java企业商品进销存管理系统