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 爬取微信文章
Jan 30 Python
python实现数据库跨服务器迁移
Apr 12 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
python基础 range的用法解析
Aug 23 Python
python 列表推导式使用详解
Aug 29 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
pandas的相关系数与协方差实例
Dec 27 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python利用opencv实现颜色检测
Feb 23 Python
Python制作一个随机抽奖小工具的实现
Jul 07 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单例模式详细介绍
2015/07/01 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
党员公开承诺书
2014/03/25 职场文书
应届生自荐书
2014/06/23 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
Python中requests库的用法详解
2022/06/05 Python