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 09 Python
Python书单 不将就
Jul 11 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
python TK库简单应用(实时显示子进程输出)
Oct 29 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python爬虫之爬取笔趣阁小说
Apr 22 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判断两个浮点数是否相等的方法
2015/03/14 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
很好用的js日历算法详细代码
2013/03/07 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
Jquery性能优化详解
2014/05/15 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
详解Python中with语句的用法
2015/04/15 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
对python的输出和输出格式详解
2018/12/08 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
解决Django连接db遇到的问题
2019/08/29 Python
本科毕业生求职自荐信
2014/04/09 职场文书
购房协议书
2014/04/11 职场文书
四风问题查摆材料
2014/08/25 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript