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中的sort方法使用详解
Jul 25 Python
进一步探究Python中的正则表达式
Apr 28 Python
Python的time模块中的常用方法整理
Jun 18 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
python实现简易学生信息管理系统
Apr 05 Python
python numpy数组中的复制知识解析
Feb 03 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
python 使用建议与技巧分享(四)
Aug 18 Python
Python安装并操作redis实现流程详解
Oct 13 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初学者头痛的十四个问题
2006/07/12 PHP
PHP新手上路(六)
2006/10/09 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
Prototype中dom对象方法汇总
2008/09/17 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
js闭包实例汇总
2014/11/09 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
python笔记(2)
2012/10/24 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
python动态加载包的方法小结
2016/04/18 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
美国网上书店:Barnes & Noble
2018/08/15 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
给领导的检讨书
2014/02/16 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
员工开除通知书
2015/04/25 职场文书
撤诉状格式范本
2015/05/19 职场文书
大队委员竞选稿
2015/11/20 职场文书
Android 中的类文件和类加载器详情
2022/06/05 Java/Android
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS