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创建和使用字典实例详解
Nov 01 Python
为Python程序添加图形化界面的教程
Apr 29 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
详解基于django实现的webssh简单例子
Jul 17 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
Python partial函数原理及用法解析
Dec 11 Python
Python数据持久化存储实现方法分析
Dec 21 Python
python实现粒子群算法
Oct 15 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学习笔记 数组遍历实现代码
2011/06/09 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python的常用模块之collections模块详解
2018/12/06 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
Sony C++笔试题
2013/03/10 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
公司行政经理岗位职责
2013/12/24 职场文书
建筑设计学生的自我评价
2014/01/16 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
环保倡议书50字
2014/05/15 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
大一学生个人总结
2015/02/15 职场文书
督导岗位职责范本
2015/04/10 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server