用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自定义线程池实现方法分析
Feb 07 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Python的UTC时间转换讲解
Feb 26 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
django为Form生成的label标签添加class方式
May 20 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
常用的10个Python实用小技巧
Aug 10 Python
详解python中的lambda与sorted函数
Sep 04 Python
python的html标准库
Apr 29 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
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PDO::_construct讲解
2019/01/27 PHP
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Python Socket传输文件示例
2017/01/16 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
某公司Java工程师面试题笔试题
2016/03/27 面试题
毕业设计说明书
2014/05/07 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
村干部任职承诺书
2015/01/21 职场文书
政协工作总结2015
2015/05/20 职场文书
新年晚会开场白
2015/05/29 职场文书
论文评审意见
2015/06/05 职场文书
实习报告范文
2019/07/30 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis