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


Posted in Python onMay 30, 2019

插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进、后退、左转、右转,乌龟的尾巴朝下,它移动时就会画一条线。并且为了增加乌龟画图的艺术价值,可以改变尾巴宽度和尾巴浸入墨水的颜色。

1.递归绘制螺旋

先用我们让乌龟以line_len长度前进,然后向右旋转90°,然后缩短line_len长度递归调用draw_spiral函数

import turtle
my_turtle = turtle.Turtle()
my_win = turtle.Screen()
def draw_spiral(tur, line_len):
  if line_len > 0:
    my_turtle.forward(line_len)
    my_turtle.right(90)
    draw_spiral(tur, line_len - 1)
draw_spiral(my_turtle, 100)
my_win.exitonclick()

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

2.递归绘制二叉树

首先绘制branch_length长度的主干枝条,然后向右旋转20°,递归调用draw_tree绘制主干枝条上的右分支,之后再向左旋转40°(因为需要抵消右旋转的20°),递归调用draw_tree绘制主干枝条的左分支,然后再向右旋转20°,原路返回。

import turtle
my_tree = turtle.Turtle()
my_win = turtle.Screen()
def draw_tree(branch_length, t):
  if branch_length > 5:
    t.forward(branch_length)
    t.right(20)
    draw_tree(branch_length-20, t)
    t.left(40)
    draw_tree(branch_length-20, t)
    t.right(20)
    t.backward(branch_length)
my_tree.left(90)
my_tree.up() # 抬起尾巴
my_tree.backward(200)
my_tree.down() # 放下尾巴
my_tree.color('green')
draw_tree(100, my_tree)
my_win.exitonclick()

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

3.绘制谢尔宾斯基三角形

谢尔宾斯基三角形使用了三路递归算法,从一个大三角形开始,通过连接每一个边的中点,将大三角型分为四个三角形,然后忽略中间的三角形,依次对其余三个三角形执行上述操作。

import turtle
def draw_triangle(points, color, my_angle):
  my_angle.fillcolor(color)
  my_angle.up()
  my_angle.goto(points[0][0], points[0][1])
  my_angle.down()
  my_angle.begin_fill()
  my_angle.goto(points[1][0], points[1][1])
  my_angle.goto(points[2][0], points[2][1])
  my_angle.goto(points[0][0], points[0][1])
  my_angle.end_fill()
def get_mid(p1, p2):
  return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)
def sierpinski(points, degree, my_angle):
  colormap = ['blue', 'red', 'green', 'yellow',
        'violet', 'orange', 'white']
  draw_triangle(points, colormap[degree], my_angle)
  if degree > 0:
    sierpinski([points[0],
          get_mid(points[0], points[1]),
          get_mid(points[0], points[2])],
          degree - 1, my_angle)
    sierpinski([points[1],
          get_mid(points[0], points[1]),
          get_mid(points[1], points[2])],
          degree - 1, my_angle)
    sierpinski([points[2],
          get_mid(points[2], points[1]),
          get_mid(points[0], points[2])],
          degree - 1, my_angle)
my_turtle = turtle.Turtle()
my_win = turtle.Screen()
my_points = [[-100, -50], [0, 100], [100, -50]]
sierpinski(my_points, 3, my_turtle)
my_win.exitonclick()

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

总结

以上所述是小编给大家介绍的python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python使用turtle库绘制时钟
Mar 25 Python
python random从集合中随机选择元素的方法
Jan 23 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 #Python
基于Python打造账号共享浏览器功能
May 30 #Python
Python实现带下标索引的遍历操作示例
May 30 #Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 #Python
python2和python3在处理字符串上的区别详解
May 29 #Python
python TF-IDF算法实现文本关键词提取
May 29 #Python
详解Python odoo中嵌入html简单的分页功能
May 29 #Python
You might like
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
第六章 php目录与文件操作
2011/12/30 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
javascript实现滚动条效果
2020/03/24 Javascript
vue实现图片上传功能
2020/05/28 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
python中sys.argv参数用法实例分析
2015/05/20 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
Python中if有多个条件处理方法
2020/02/26 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
初三家长会邀请函
2014/01/18 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
廉洁自律个人总结
2015/02/14 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
教师继续教育反思周记
2015/06/25 职场文书
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python