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 异常处理实例详解
Mar 12 Python
Python对象转JSON字符串的方法
Apr 27 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
浅谈Python traceback的优雅处理
Aug 31 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python matplotlib可视化实例解析
Jun 01 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
python字典的元素访问实例详解
Jul 21 Python
Python中rapidjson参数校验实现
Jul 25 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Vue实现购物车功能
2017/04/27 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
详细解析Python中的变量的数据类型
2015/05/13 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
超简单的Python HTTP服务
2019/07/22 Python
python字符串格式化方式解析
2019/10/19 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
城管综合整治方案
2014/05/01 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
教师考核表个人总结
2015/02/12 职场文书
工会工作个人总结
2015/03/03 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript