用python给你带来你的桃花运,详细解析画一棵表白树
程序员就只能简简单单的用手里的代码来实现自己最直接的想法 。 -------------鲁迅表示这句话他没说过—————————————————————————————————————————————在家上网课贼无聊 , 于是复习以前的知识点 , 瞥到之前用递归实现的科赫曲线 , 突然来了一点头绪 , 上博客转转 , 却看到一堆大佬画的樱花树 , 实属牛逼 , 就是感觉教学不是很详细 , 于是我研究了一下 , 写下我所理解的关于树的画法 , 下面有些思想还是借鉴大佬们的 。
【用python给你带来你的桃花运,详细解析画一棵表白树】私信小编01即可获取大量Python学习资料
————————————————————————————————————————————–在这里我们是要用到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 t brance = 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 tbrance = 70def 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()
这样我们就实现了一棵只有一种颜色花朵的树
画二种颜色的树:如何绘制二种颜色的树呢?我们只需要在每一个分支范围内进行一次判断 , 如果条件为真 , 那我们改颜色 , 反之 , 我们不改颜色:代码如下:
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 采用|消息称一加9系列将推出三款新机,新增一加9E
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 行业|现在行业内客服托管费用是怎么算的
- 闲鱼|电诉宝:“闲鱼”网络欺诈成用户投诉热点 Q3获“不建议下单”评级
- 美国|英国媒体惊叹:165个国家采用北斗将GPS替代,连美国也不例外?
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- 同轴心配合|用SolidWorks画一个直角传动,画四个零件就行
- 先别|用了周冬雨的照片,我会成为下一个被告?自媒体创作者先别自乱阵脚
- 速度|华为P50Pro或采用很吓人的拍照技术:液体镜头让对焦速度更快