用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获取代码运行时间的实例代码
Jun 11 Python
python3利用Socket实现通信的方法示例
May 06 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 Python
Python reduce函数作用及实例解析
May 08 Python
Python使用Excel将数据写入多个sheet
May 16 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
PHP自定义多进制的方法
2016/11/03 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python实现数据库编程方法详解
2015/06/09 Python
python里dict变成list实例方法
2019/06/26 Python
Python读取实时数据流示例
2019/12/02 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
应届生求职信范文
2014/05/26 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
利用Python判断你的密码难度等级
2021/06/02 Python
Redis Lua脚本实现ip限流示例
2022/07/15 Redis