用python绘制樱花树


Posted in Python onOctober 09, 2020

黑夜可能漫长,但总会迎来温暖的阳光,三月如期而至,武大的樱花又一次盛开。那么今天就一起来看看怎样在python中画一棵美丽的樱花树~

说到用python画画,那当然就是小乌龟Turtle库了,为啥是turtle呢,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

一、安装与引入

安装没有什么难度直接pip安装就可以

pip install turtle

可使用以下3种方法引入:

用python绘制樱花树

二、使用

turtle库使用起来也很简单,主要就是利用几个核心的控制代码

turtle.goto(x,y):直接跳转到(x,y)点,以绘图窗口中心为原点,

turtle.fd(d):以当前方向,往前行进d像素。

turtle.bk(d):保持当前方向不变,往后退行d像素。

turtle.circle(r,angle):以r为半径圆的angle角度旋转。

turtle.penup():抬笔

turtle.pendown():落笔

urtle.left(angle):向左旋转angle度。

turtle.right(angle):向右旋转angle度。

比如绘制树干部分的代码可以这样写

def Tree(branch, t):
 time.sleep(0.0005)
 if branch > 3:
  if 6 <= branch <= 12: #
   if random.randint(0, 2) == 0: #随机绘制
    t.color('snow') #设置颜色
   else:
    t.color('lightcoral') # 树叶颜色
   t.pensize(branch / 3)
  elif branch < 6:
   if random.randint(0, 1) == 0:
    t.color('snow')
   else:
    t.color('lightcoral') #
   t.pensize(branch / 2)
  else:
   t.color('sienna') # 赭(zhě)色
   t.pensize(branch / 10) # 6
  t.forward(branch)
  a = 1.5 * random.random()
  t.right(20 * a)
  b = 1.5 * random.random()
  Tree(branch - 10 * b, t)
  t.left(40 * a)
  Tree(branch - 10 * b, t)
  t.right(20 * a)
  t.up()
  t.backward(branch)
  t.down()

而写字的部分就不用一笔一划的去绘制,直接使用turtle.write()就可以在指定位置写上你需要的文字。

write(arg,move=false,align='left',font=('arial',8,'normal'))

#arg--将写入Turtle绘画屏幕的文字。

#align(可选)--“左(left)”、“中(center)”或“右(right)”之一。

#font(可选)--(fontname、fontsize、fonttype)。

那么来看看最后效果吧!

用python绘制樱花树

完整源码:

import turtle as T
import random
import time

# 画樱花的躯干(60,t)
def Tree(branch, t):
  time.sleep(0.0005)
  if branch > 3:
    if 8 <= branch <= 12:
      if random.randint(0, 2) == 0:
        t.color('snow') # 白
      else:
        t.color('lightcoral') # 淡珊瑚色
      t.pensize(branch / 3)
    elif branch < 8:
      if random.randint(0, 1) == 0:
        t.color('snow')
      else:
        t.color('lightcoral') # 淡珊瑚色
      t.pensize(branch / 2)
    else:
      t.color('sienna') # 赭(zhě)色
      t.pensize(branch / 10) # 6
    t.forward(branch)
    a = 1.5 * random.random()
    t.right(20 * a)
    b = 1.5 * random.random()
    Tree(branch - 10 * b, t)
    t.left(40 * a)
    Tree(branch - 10 * b, t)
    t.right(20 * a)
    t.up()
    t.backward(branch)
    t.down()

# 掉落的花瓣
def Petal(m, t):
  for i in range(m):
    a = 200 - 400 * random.random()
    b = 10 - 20 * random.random()
    t.up()
    t.forward(b)
    t.left(90)
    t.forward(a)
    t.down()
    t.color('lightcoral') # 淡珊瑚色
    t.circle(1)
    t.up()
    t.backward(a)
    t.right(90)
    t.backward(b)

# 绘图区域
t = T.Turtle()
# 画布大小
w = T.Screen()
t.hideturtle() # 隐藏画笔
t.getscreen().tracer(5, 0)
w.screensize(bg='wheat') # wheat小麦
t.left(90)
t.up()
t.backward(150)
t.down()
t.color('sienna')

# 画樱花的躯干
Tree(60, t)
# 掉落的花瓣
Petal(200, t)
w.exitonclick()

以上就是用python绘制樱花树的详细内容,更多关于python绘图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
极简的Python入门指引
Apr 01 Python
Python图算法实例分析
Aug 13 Python
遗传算法之Python实现代码
Oct 10 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
教你用Python创建微信聊天机器人
Mar 31 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
numpy中的meshgrid函数的使用
Jul 31 Python
python中的反斜杠问题深入讲解
Aug 12 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
Django url 路由匹配过程详解
Jan 22 Python
Python logging日志库空间不足问题解决
Sep 14 #Python
Python grpc超时机制代码示例
Sep 14 #Python
python/golang 删除链表中的元素
Sep 14 #Python
Python基于pillow库实现生成图片水印
Sep 14 #Python
python/golang实现循环链表的示例代码
Sep 14 #Python
python实现canny边缘检测
Sep 14 #Python
Python gevent协程切换实现详解
Sep 14 #Python
You might like
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
深入php之规范编程命名小结
2013/05/15 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
Python中itertools模块用法详解
2014/09/25 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
基于Python的接口测试框架实例
2016/11/04 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
浅谈python可视化包Bokeh
2018/02/07 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
python实现可变变量名方法详解
2019/07/01 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
python如何把字符串类型list转换成list
2020/02/18 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
C#中的验证控件有几种
2014/03/08 面试题
大学生学习党课思想汇报
2014/01/03 职场文书
教导处教学工作总结
2015/08/12 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
24年收藏2000多部退役军用电台
2022/02/18 无线电