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实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
对python sklearn one-hot编码详解
Jul 10 Python
python散点图实例之随机漫步
Aug 27 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python 使用值来排序一个字典的方法
Nov 16 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
python 寻找离散序列极值点的方法
Jul 10 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 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
第九节 绑定 [9]
2006/10/09 PHP
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
深入理解vue-loader如何使用
2017/06/06 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
《忆江南》教学反思
2014/04/07 职场文书
八项规定整改方案
2014/10/01 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
68句权威创业名言
2019/08/26 职场文书
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
python pygame 开发五子棋双人对弈
2022/05/02 Python