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基于checksum计算文件是否相同的方法
Jul 09 Python
Python 登录网站详解及实例
Apr 11 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
pycharm设置注释颜色的方法
May 23 Python
python将txt文件读入为np.array的方法
Oct 30 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python+playwright微软自动化工具的使用
Feb 02 Python
Pandas搭配lambda组合使用详解
Jan 22 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
PHP 面向对象 final类与final方法
2010/05/05 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
详解python中__name__的意义以及作用
2019/08/07 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
智能电子应届生求职信
2013/11/10 职场文书
业务经理岗位职责
2013/11/11 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
推荐信范文大全
2015/03/27 职场文书
匿名信格式范文
2015/05/27 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书