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

第五部分:运用函数

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

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

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

  1. python绘制分形图基础_Python 绘制分形图(曼德勃罗集、分形树叶、科赫曲线、分形龙、谢尔宾斯基三角等)附代码...

    1. 曼德勃罗集 import numpy as np import pylab as pl import time from matplotlib import cm def iter_point( ...

  2. Python编程:实现谢尔宾斯基三角

    Python编程:实现谢尔宾斯基三角 谢尔宾斯基三角,又称谢尔宾斯基地毯,在计算机图形学中是一种经典的分形图形.本文将使用Python编程实现Sierpinski Triangle(谢尔宾斯基三角), ...

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

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

  4. AutoJs学习-实现谢尔宾斯基三角

    往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发

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

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

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

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

  7. 陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯

    陈斌老师<数据结构与算法Python版>第五周作业--ASCII谢尔宾斯基地毯 题目 思路 程序如下 总结 题目 谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中 ...

  8. python数据结构与算法40题_Python数据结构与算法40:递归编程练习题3:ASCII谢尔宾斯基地毯...

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 递归编程练习题3:ASCII谢尔宾斯基地毯 谢尔宾斯基地毯 谢尔宾斯基地毯是形如上图的正方形分形 ...

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

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

最新文章

  1. 远程办公指南 | 齐心守护健康,共倡远程协同
  2. Java初学者必看2
  3. 后退到的页面为什么没有执行js_为什么中层没有执行力?
  4. php mysql int string_php从mysql取出int数据,变成了string
  5. zookeeper3.4.5自动清理日志
  6. 【转】QGridLayout 详解
  7. 题解 洛谷P2147/BZOJ2049【[SDOI2008]洞穴勘测】
  8. 爬虫告诉你, 互联网大数据行业有多赚钱!
  9. 3COM TFTP 3CDaemon中文绿色版
  10. IDEA Auto build completed with errors解决办法
  11. SVG 绘制可交互的中国地图
  12. 高德定位,只能定位一次,导航图标就消失
  13. hive支持update、delete
  14. 【北交所周报】北交所再迎8只新股;康普化学、凯华材料上市首日逆势大涨;康乐卫士过会,或成北交所最大IPO;北交所推出直联机制...
  15. 全栈开发实战|​人事管理系统的设计与实现(Spring Boot + Vue 3 + MyBatis)
  16. 把C盘正好分成100G的数值
  17. [NOIP2020]微信步数
  18. 晶体三极管的主要参数
  19. Ubuntu下怎么退出vim编辑器
  20. 五大常用算法——分支限界算法详解及经典例题

热门文章

  1. JavaScript高级知识汇总(高级篇)
  2. 经济金融学之2微观经济学
  3. 翟鸿燊-《国学应用大智慧》笔记
  4. [bzoj3730][点分治]震波
  5. eclipse不小心删除文件如何恢复
  6. 第三方分享工具bShare的技巧
  7. 硬盘盒、笔记本硬盘选购全攻略
  8. 好饭不怕晚--记我的Oracle数据库相识
  9. PCA与PLS的区别
  10. 商业银行经营全解析之FTP(内部资金转移定价)