用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 相关文章推荐
Python调用C语言开发的共享库方法实例
Mar 18 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
对Python中plt的画图函数详解
Nov 07 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
python字典的常用方法总结
Jul 31 Python
Python算法中的时间复杂度问题
Nov 19 Python
解决Python二维数组赋值问题
Nov 28 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
什么是Python变量作用域
Jun 03 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 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
一个用于网络的工具函数库
2006/10/09 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
在nodejs中创建child process的方法
2021/01/26 NodeJs
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python实现按首字母分类查找功能
2019/10/31 Python
Python descriptor(描述符)的实现
2020/11/15 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
乳制品整治工作方案
2014/05/29 职场文书
幼儿园标语大全
2014/06/19 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
见义勇为事迹材料
2014/12/24 职场文书
国庆节慰问信
2015/02/15 职场文书
微信搭讪开场白
2015/05/28 职场文书
同学聚会祝酒词
2015/08/10 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫