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 fileinput模块使用实例
Jun 03 Python
Python验证码识别的方法
Jul 10 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
Python3实现的简单三级菜单功能示例
Mar 12 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 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实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
python3爬取淘宝信息代码分析
2018/02/10 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
公司管理建议书范文
2014/03/12 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
优秀大学生自荐信
2014/06/09 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
vue判断按钮是否可以点击
2022/04/09 Vue.js