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

在家上网课贼无聊,于是复习以前的知识点,瞥到之前用递归实现的科赫曲线,突然来了一点头绪,上博客转转,却看到一堆大佬画的樱花树,实属牛逼,就是感觉教学不是很详细,于是我研究了一下,写下我所理解的关于树的画法,下面有些思想还是借鉴大佬们的。

在这里我们是要用到turtle函数库,用法可以参考我关注的博主教程:turtle库的使用

这里如果有不懂递归的朋友也可以参考这位博主的解析:递归思路

效果图:

一种颜色的花朵的树:

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

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

画落下的花瓣:

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

import turtle as t

for 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 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椭圆花瓣_用Python给你带来你的桃花运,详细解析画一棵表白树相关推荐

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

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

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

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

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

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

  4. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  5. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  6. python集群_使用Python集群文档

    python集群 Natural Language Processing has made huge advancements in the last years. Currently, variou ...

  7. python 网页编程_通过Python编程检索网页

    python 网页编程 The internet and the World Wide Web (WWW), is probably the most prominent source of info ...

  8. python机器学习预测_使用Python和机器学习预测未来的股市趋势

    python机器学习预测 Note from Towards Data Science's editors: While we allow independent authors to publish ...

  9. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

最新文章

  1. Cannot open precompiled header file:'Debug/password.pch' No such file or directory
  2. Java: for(;;) vs. while(true)
  3. 简略图解:输入 url 到出现页面,浏览器做了什么?
  4. EF选择Mysql数据源
  5. java给腾讯通发消息_通过web 向rtx发送通知消息
  6. python模块函数使用手册中文版_Python PyH模块中文文档
  7. 转:陈梓瀚:关于编程的胡扯
  8. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法
  9. 命令行关闭特定服务和调整服务启动方式
  10. python 语法提示_Python 语法提示vim配置
  11. 生成osm文件_[转载]OSM数据的获取及格式转换
  12. Unity——浅谈AB包(AssetBundle)
  13. matlab分割txt数据,MATLAB批量分割txt数据
  14. python爬取起点小说_Python简单爬取起点中文网小说(仅学习)
  15. groovy定义变量获取当前时间_Groovy 变量 (Groovy 教程) – Groovy教程 中文开发手册 - Break易站...
  16. HCIE 面试 ----- OSPF
  17. mac抹掉磁盘重装系统未能与服务器取得联系_如何用U盘自制Mac笔记本系统重装盘...
  18. python基础 培训班
  19. 期货开户手续费怎么计算?
  20. 聊天机器人中的深度学习

热门文章

  1. content-box和border-box区别
  2. FFmpeg从零开始
  3. pymongo 使用教程
  4. json解析异常(转义符处理)
  5. 最新(2022年)EcoVadis奖牌的评分要求和资格标准
  6. Oracle行转列pivot
  7. 1981年图灵奖--埃德加·科德简介
  8. 防抖和节流之提桶跑路!!!!!!!
  9. python写微信公众号文章_python如何导出微信公众号文章
  10. 对新买的电脑测试以及加装固态硬盘问题