谢尔宾斯基三角用Python做,你知道吗?
大家好,我叫王若冲。因为我妈叫我冲姐,所以你们也可以这么叫我。今天是我的第一篇文章,就给大家讲谢尔宾斯基三角的代码吧。如果你既想要试一试,又懒得自己写代码,那么原代码就在下面。*注意,这次我用的软件叫做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做,你知道吗?相关推荐
- python绘制分形图基础_Python 绘制分形图(曼德勃罗集、分形树叶、科赫曲线、分形龙、谢尔宾斯基三角等)附代码...
1. 曼德勃罗集 import numpy as np import pylab as pl import time from matplotlib import cm def iter_point( ...
- Python编程:实现谢尔宾斯基三角
Python编程:实现谢尔宾斯基三角 谢尔宾斯基三角,又称谢尔宾斯基地毯,在计算机图形学中是一种经典的分形图形.本文将使用Python编程实现Sierpinski Triangle(谢尔宾斯基三角), ...
- 关于谢尔宾斯基三角(Sierpinski)的讲解
谢尔宾斯基三角(Sierpinski)是一种分形,由波兰数学家谢尔宾斯基在1915年提出.它是自相似集的例子.它的豪斯多夫维是log(3)/log(2) ≈ 1.585. * 图一:完成后的 谢尔宾斯 ...
- AutoJs学习-实现谢尔宾斯基三角
往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发
- Python数据结构15:turtle模块制图,画直线,正方形,星星,递归可视化:分形树,谢尔宾斯基三角形
1. Python中的turtle模块制图 前面已经讲了递归的原理,这里用递归作图来直观的理解递归. 首先了解以下Python中用于作图的内置海龟作图系统turtle module. Python内置 ...
- python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...
插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...
- 陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯
陈斌老师<数据结构与算法Python版>第五周作业--ASCII谢尔宾斯基地毯 题目 思路 程序如下 总结 题目 谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中 ...
- python数据结构与算法40题_Python数据结构与算法40:递归编程练习题3:ASCII谢尔宾斯基地毯...
注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 递归编程练习题3:ASCII谢尔宾斯基地毯 谢尔宾斯基地毯 谢尔宾斯基地毯是形如上图的正方形分形 ...
- 数据结构与算法(Python版)二十二:递归可视化(谢尔宾斯基三角形)
谢尔宾斯基Sierpinski三角形 分形构造, 平面称谢尔宾斯基三角形, 立体称谢尔宾斯基金字塔 谢尔宾斯基三角形:作图思路 根据自相似特性, 谢尔宾斯基三角形是由3个尺寸减半的谢尔宾斯基三角形按照 ...
最新文章
- 远程办公指南 | 齐心守护健康,共倡远程协同
- Java初学者必看2
- 后退到的页面为什么没有执行js_为什么中层没有执行力?
- php mysql int string_php从mysql取出int数据,变成了string
- zookeeper3.4.5自动清理日志
- 【转】QGridLayout 详解
- 题解 洛谷P2147/BZOJ2049【[SDOI2008]洞穴勘测】
- 爬虫告诉你, 互联网大数据行业有多赚钱!
- 3COM TFTP 3CDaemon中文绿色版
- IDEA Auto build completed with errors解决办法
- SVG 绘制可交互的中国地图
- 高德定位,只能定位一次,导航图标就消失
- hive支持update、delete
- 【北交所周报】北交所再迎8只新股;康普化学、凯华材料上市首日逆势大涨;康乐卫士过会,或成北交所最大IPO;北交所推出直联机制...
- 全栈开发实战|​人事管理系统的设计与实现(Spring Boot + Vue 3 + MyBatis)
- 把C盘正好分成100G的数值
- [NOIP2020]微信步数
- 晶体三极管的主要参数
- Ubuntu下怎么退出vim编辑器
- 五大常用算法——分支限界算法详解及经典例题