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内置函数bin() oct()等实现进制转换
Dec 30 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
详解Python3 pandas.merge用法
Sep 05 Python
基于h5py的使用及数据封装代码
Dec 26 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
python利用线程实现多任务
Sep 18 Python
pytorch中Schedule与warmup_steps的用法说明
May 24 Python
python中的None与NULL用法说明
May 25 Python
python超详细实现完整学生成绩管理系统
Mar 17 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
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
JavaScript创建表格的方法
2020/04/13 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
离婚协议书格式
2014/11/21 职场文书
民事二审代理词
2015/05/25 职场文书
遗失证明范文
2015/06/19 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
Docker安装MySql8并远程访问的实现
2022/07/07 Servers