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中处理XML的教程
Apr 29 Python
Python数据分析之获取双色球历史信息的方法示例
Feb 03 Python
Python File readlines() 使用方法
Mar 19 Python
TensorFlow的权值更新方法
Jun 14 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
python实现动态数组的示例代码
Jul 15 Python
python logging日志模块原理及操作解析
Oct 12 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python 绘制可视化折线图
Jul 22 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
Django使用channels + websocket打造在线聊天室
May 20 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&java(三)
2006/10/09 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
python实现socket端口重定向示例
2014/02/10 Python
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python中的高级函数map/reduce使用实例
2015/04/13 Python
python搜索指定目录的方法
2015/04/29 Python
Python实现截屏的函数
2015/07/25 Python
python之Character string(实例讲解)
2017/09/25 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
2015年行政工作总结范文
2015/04/09 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书