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中属性和描述符的正确使用
Aug 23 Python
Django的信号机制详解
May 05 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
python中set()函数简介及实例解析
Jan 09 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
python实现车牌识别的示例代码
Aug 05 Python
Python中的__init__作用是什么
Jun 09 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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/11/25 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
vue.js的安装方法
2017/05/12 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
生态学毕业生自荐信
2013/10/27 职场文书
实习教师个人的自我评价
2013/11/08 职场文书
优秀应届生推荐信
2013/11/09 职场文书
关于赌博的检讨书
2014/01/24 职场文书
反邪教警示教育方案
2014/05/13 职场文书
高三霸气励志标语
2014/06/24 职场文书
pandas数值排序的实现实例
2021/07/25 Python