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提取html文件中的特定数据的实现代码
Mar 24 Python
Python实现发送email的几种常用方法
Aug 18 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
Python使用folium excel绘制point
Jan 03 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
Python OpenGL基本配置方式
May 20 Python
python区块链实现简版工作量证明
May 25 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
239军机修复记
2021/03/02 无线电
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
js中function()使用方法
2013/12/24 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Windows下python3.7安装教程
2018/07/31 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
如何强制垃圾回收
2015/10/06 面试题
什么是.net
2015/08/03 面试题
管理信息系学生的自我评价
2014/01/11 职场文书
求职毕业生自荐书
2014/02/08 职场文书
军训学生自我鉴定
2014/02/12 职场文书
作风建设年度心得体会
2014/10/29 职场文书
2014年个人售房协议书
2014/10/30 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
Go 自定义package包设置与导入操作
2021/05/06 Golang