程序员就只能简简单单的用手里的代码来实现自己最直接的想法。-------------鲁迅表示这句话他没说过—————————————————————————————————————————————
在家上网课贼无聊,于是复习以前的知识点,瞥到之前用递归实现的科赫曲线,突然来了一点头绪,上博客转转,却看到一堆大佬画的樱花树,实属牛逼,就是感觉教学不是很详细,于是我研究了一下,写下我所理解的关于树的画法,下面有些思想还是借鉴大佬们的。

————————————————————————————————————————————–
在这里我们是要用到turtle函数库,用法可以参考我关注的博主教程:turtle库的使用
这里如果有不懂递归的朋友也可以参考这位博主的解析:递归思路

效果图:

一种颜色的花朵的树:

这是很多大佬的原思想图,我做了一点改进。

画这棵树分为二部分,画整体和画落下的花瓣:

画落下的花瓣:

这里用到了随机函数库random,确保每次画叶子的位置不同,形成那种真实感:

 import turtle as tfor i in range(150):  # 循环150次 绘制 掉落的花瓣a = 250 - 500 * random.random()  # 花瓣整体长度,有正有负就可以让海龟往二个方向走b = 10 - 20 * random.random()  # 花瓣整体宽度,正负道理一致,数值可以根据实际输入t.penup()  # 抬笔向前随机走b个宽度,左转90,随机走a个长度,落笔,跟我画一个小圈圈t.fd(b)t.left(90)t.fd(a)t.pendown()t.pencolor("lightcoral")  # 珊瑚色t.circle(1)t.penup()     # 跟我左边抬个笔,后退个a的长度,右边转个90,后退个b的宽度,这样可以t.backward(a)  #  让海龟回到和刚出发位置差不多的水平线上,所以上面的b设置最好小一点t.right(90)t.backward(b)

画树枝部分:

这里用到了二叉树的递归思想:
我就小小的画了一个很正的二叉树给你们看看效果就行


这样的树就是很端正,但是实话就是不好看,我们给出代码:

 import turtle as tbrance = 60  #  枝条 总度def draw_tree1(brance):if brance > 10:  # 条件满足先画右边t.fd(brance)  # 绘制最开始的树干 t.right(30)  # 然后右转30,第一个右分支draw_tree1(brance / 1.5)  # 继续画右边的 走不动了往左边转60 和下面一样用到了递归t.left(60)   # 然后左转60  进入向左绘制draw_tree1(brance / 1.5)  # 继续画左边的,走不动了右转30回到最后一步的之前那个节点  t.right(30)# 给最后二个树枝画上雪白的叶子if brance / 1.5 <= 10:  #  这个条件可以根据实际设置t.pencolor("snow")else:t.pencolor("Tan")  #  褐色t.backward(brance)  # 当递归条件不满足的时候,后退一个节点

思考什么因素让这棵树如此端正,因为每次向左向右的角度固定,向前衍生的枝条长度也是固定
那我们可以想到用随机函数库random来实现每次的操作不一致,就能产生不一样的效果

画一种颜色的树:

代码:

import turtle as t
brance = 70
def draw_tree(brance):  # 画树枝部分  分支量 if brance > 4:  # 设置一个最小分支量 可以自己改if 8 <= brance <= 16:   # 分支量在这个范围内,画笔大小缩小四倍,画中等细小的树枝t.pencolor("lightcoral")  # 珊瑚色t.pensize(brance / 4)elif brance < 8:   #  分支量在这个范围内,画笔大小缩小二倍 , 画细小的树枝t.pencolor("lightcoral")  # 珊瑚色t.pensize(brance / 2)else:   #  其他范围内,我们让程序画树干部分t.pencolor("Tan")  # 褐色t.pensize(brance / 10)  # 缩小支柱t.fd(brance)  # 最开始的树干部分a = 1.5 * random.random()  # 随机度数因子t.right(20 * a)   #右转随机角度b = 1.5 * random.random()  # 随机长度因子draw_tree(brance - 10 * b)  # 往右画,直到画不动为止,然后左转随机度数t.left(40 * a)  # 左转随机角度draw_tree(brance - 10 * b)  # 往左画,直到画不动位置,然后右转随机度数t.right(20 * a)   # 右转一定角度t.penup()t.backward(brance)  # 递归结束回到上一个节点t.pendown()

这样我们就实现了一棵只有一种颜色花朵的树

画二种颜色的树:

如何绘制二种颜色的树呢?我们只需要在每一个分支范围内进行一次判断,如果条件为真,那我们改颜色,反之,我们不改颜色:
代码如下:

        if 8 <= brance <= 16:if random.randint(0, 2) == 0: #这里随机三个数 三分之一概论 改颜色 t.pencolor("snow")     # 因为这个范围还是画中等细小树枝else:t.pencolor("lightcoral")  # 珊瑚色t.pensize(brance / 4)elif brance < 8:if random.randint(0, 1) == 0:   # 这里随机两二个树,二分之一t.pencolor("snow")           # 因为这里画很细小的树枝  概论小点else:t.pencolor("lightcoral")  # 珊瑚色t.pensize(brance / 2)else:t.pencolor("Tan")  # 褐色t.pensize(brance / 10)  # 缩小分支量

大致代码基本都给出了,这里说明一下,如果想绘制二棵以上,只要在主程序下面先运行一棵,然后修改一下起点位置,重新调用一下二个函数就行,里面的值最好设置小一点,可以有个层次感。

主程序:

import turtle as  T
import random
t = T.Turtle()
w = T.Screen()
w.screensize(bg='wheat')  # 画布颜色小麦色 个人觉得还是这个最搭配
t.getscreen().tracer(5, 0)  # 返回正在绘制的对象 并且加速5倍
t.pensize(5)
t.left(90)
t.penup()
t.backward(250)
t.pendown()
t.pencolor("Tan")  # 褐色
draw_tree(70)  # 第一颗桃花,支柱设置70
petel(250)  # 花瓣250
w.exitonclick()  # 点击关闭画布

三月桃花开,用python给你带来你的桃花运,详细解析画一棵表白树!相关推荐

  1. (python实现表白树)四月桃花开,用python给你带来你的桃花运,详细解析画一棵表白树!

    python实现表白树,50行代码实现! 效果图: 画这棵树分为二部分,画整体和画落下的花瓣: 画落下的花瓣: 画树枝部分: 画一种颜色的树: 画二种颜色的树: 主程序: 我们不做代码的搬运工,要做有 ...

  2. 用python给你带来你的桃花运,详细解析画一棵表白树!

    程序员就只能简简单单的用手里的代码来实现自己最直接的想法.-------------鲁迅表示这句话他没说过--------------------------------------------- 在 ...

  3. python椭圆花瓣_用Python给你带来你的桃花运,详细解析画一棵表白树

    程序员就只能简简单单的用手里的代码来实现自己最直接的想法.-------------鲁迅表示这句话他没说过 在家上网课贼无聊,于是复习以前的知识点,瞥到之前用递归实现的科赫曲线,突然来了一点头绪,上博 ...

  4. Python Exceptions 异常处理全过程以及异常模块详细解析

    1.异常的定义 程序运行时检测到错误而导致解释器无法继续执行,反而出现一些错误的提示 2.捕捉异常全过程(重点) try:print("可能产生异常的代码")except Exce ...

  5. 用Python画一棵分形树

    文章目录 画一棵分形树 加入随机量的分形树 加入点缀的圣诞树 画一棵分形树 分形树,就是用分形的逻辑去画一棵树,所谓分形,若从编程的角度去理解,其实就是简单规则的反复迭代. 例如,现在有一条线段,长为 ...

  6. 用Python实现快速排序和冒泡排序,代码+详细解析

    1.冒泡排序 冒泡排序:每一次相邻的两个数做比较,大的往后移动一位,每次循环都会把最大的值(升序)或最小的值(降序)放在末端 . # a = [7, 8, 5, 45, 91, 1, -10, 0] ...

  7. Python画一棵茂盛的分形树

    文章目录 前情回顾 添加分岔 茂盛的分形树 前情回顾 上次画了一棵分形树:用Python画一棵分形树,得到的图如下 发现看的人还是挺多的,但没什么人点赞,这说明我能给大家画分形树,大家很高兴,但这棵树 ...

  8. python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...

    PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于 ...

  9. 电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分

    电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分,是电影天堂APP项目开发课程的第一篇章,讲解使用requests和bs4库,爬取和解析电影天堂网站数据,并讲数据保存到SQLite数 ...

最新文章

  1. 液晶显示原理与ILI9341的使用
  2. python 求list最小值的索引_【挑战自学Python编程】第六天:前五天都学了啥?
  3. 文件包含漏洞——DVWA练习
  4. NYOJ-522 Interval
  5. 面试pythone_python面试常见问题有哪些
  6. linux下安装配置apache+php,linux下安装apache与php;Apache+PHP+MySQL配置攻略
  7. 6个很棒的PostCSS插件,让您成为一个CSS向导
  8. 执行shell脚本报/bin/bash^M: bad interpreter
  9. C#关键字扫盲——Tuple(元组类) 、ValueTuple(值元组)
  10. 先验概率与后验概率的区别
  11. 配置 LDAP 服务器
  12. POJ 1442 Black Box 优先队列
  13. MATLAB常用画图命令汇总【已坑】
  14. 地图服务 纬度、经度对应坐标轴x,y
  15. 包装印前软件“方正锐利”升级到11.5版本,新增可变数据印刷功能
  16. Talk with GoF
  17. 即将发布的 Apache Spark 3.2 将内置 Pandas API
  18. 投资中最简单的事--阅读笔记
  19. wwwxxx域名选择(www.xxx.com或者.cn)
  20. 前端基础之CSS盒子模型

热门文章

  1. TensorFlow构建模型(TFRecord)十
  2. 日历表(第九周上机任务)。(不用掰手指头算了吧)
  3. 怎么查找计算机隐藏用户,怎么找到隐藏的wifi_电脑怎么搜索隐藏wifi-win7之家
  4. 二鱼和我,武汉,黑客马拉松
  5. 计算机故障维修四种思路,计算机常见问题维修小技巧
  6. 事务和事务的隔离级别
  7. IDEA配置:使用代理访问内网服务器
  8. rsync 增量传输大文件优化
  9. 商人渡模型matlab及模型假设,商人和仆人渡河
  10. 编译原理之最左推导和最右推导