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

el/2023/12/3 1:56:05

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

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465

————————————————————————————————————————————–
在这里我们是要用到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()  # 点击关闭画布

http://www.ngui.cc/el/1524937.html

相关文章

用python爬猫眼电影,简单网站却有 “多重思路” !

七夕不看电影就爬电影吧。猫眼电影作为爬虫的必备练手网站&#xff0c;相信每个人都试过吧&#xff1f; 那么这篇文章&#xff0c;我就再爬一次猫眼电影&#xff0c;而且用上正则和xpath一起&#xff0c;分别保存为excel表格和csv表格&#xff0c;&#xff08;text文本这个就太…

本周 GitHub 速览:自动化当道,破密、Python爬虫各凭本事

摘要&#xff1a;安全门外汉&#xff0c;如何在不知道密钥或密码的情况下&#xff0c;破解哈希得到原文&#xff0c;Ciphey 会告诉你当中的密码。说到 auto 智能爬虫会基于上一次的爬虫经历进一步学习以获得类似信息。最优雅的莫属于 Diagram as Code——Diagrams&#xff0c;用…

Python采集网易云音乐

大家好&#xff0c;我是不温卜火&#xff0c;是一名计算机学院大数据专业大三的学生&#xff0c;昵称来源于成语—不温不火&#xff0c;本意是希望自己性情温和。作为一名互联网行业的小白&#xff0c;博主写博客一方面是为了记录自己的学习过程&#xff0c;另一方面是总结自己…

Python自动化办公:PDF批量处理(打水印、加密码、分类放置)

在日常工作中&#xff0c;要保护一下我们的商业机密嘛~ 如果按名单向客户逐一发文件&#xff0c;如果就发几份&#xff0c;那么可以采取用pdf软件逐份编辑&#xff0c;打个水印、加个密码咯。但面对成百上千份文件&#xff0c;就需要批量处理了&#xff01;菜鸡在熬夜加班后终于…

Python爬虫教程,采集bilibili弹幕并生成词云

Python爬取bilibili弹幕并生成词云 目标网站&#xff1a; 我这里以 TES vs SN 第四场决胜局为例&#xff1a; 探索经历&#xff1a; 很多人学习python&#xff0c;不知道从何学起。 很多人学习python&#xff0c;掌握了基本语法过后&#xff0c;不知道在哪里寻找案例上手。 …

Python+selenium通过定时任务,在指定时间自动运行程序

创建定时任务&#xff0c;在指定的时间自动运行测试用例 设置指定的时间让自动化python脚本自动运行起来&#xff0c;不需要人为手动点击启动运行 很多人学习python&#xff0c;不知道从何学起。 很多人学习python&#xff0c;掌握了基本语法过后&#xff0c;不知道在哪里寻找…

舅舅喜欢打牌,我用python给他写了个抽奖小程序!希望能够帮到他

前言&#xff1a; 舅舅是个赌瘾很重的人&#xff0c;特别对麻将更是独爱&#xff0c;为此全家人很烦恼&#xff0c;对此就想着用“以毒攻毒”专门写个抽奖小程序给舅舅&#xff0c;希望能帮他缓解&#xff0c;分散&#xff0c;转移牌瘾&#xff0c;回到美好生活中&#xff01;…

JS逆向教程:Python采集今日头条视频

最近在做今日头条文章数据抓取的过程中&#xff0c;发现视频地址的获取较为复杂。在源码与浏览器配合下发现对应的解决思路&#xff0c;故此记录一下。 很多人学习python&#xff0c;不知道从何学起。 很多人学习python&#xff0c;掌握了基本语法过后&#xff0c;不知道在哪里…

Python常见反爬与反反爬

一. request请求头限制 很多人学习python&#xff0c;不知道从何学起。 很多人学习python&#xff0c;掌握了基本语法过后&#xff0c;不知道在哪里寻找案例上手。 很多已经做案例的人&#xff0c;却不知道如何去学习更加高深的知识。 那么针对这三类人&#xff0c;我给大家提…

Python搭建代理池,为你的爬虫程序保驾护航!

由于爬虫工作往往有大量数据需要爬取&#xff0c;便需要大量的备用IP更换&#xff0c;这时就需要用到代理IP池。将大量可以用于更换的代理IP汇聚要一起&#xff0c;便于管理和调用&#xff0c;IP池就这样产生了。IP池有一下特征&#xff1a;它里面的IP是持续补充的&#xff0c;…