Python 3 使用Pillow生成漂亮的分形树图片


Posted in Python onDecember 24, 2019

该程序通过绘制树干(最初是树;后来是树枝)并递归地添加树来绘制“树”。 使用Pillow。

利用递归函数绘制分形树(fractal tree),分形几何学的基本思想:客观事物具有自相似的层次结构,局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似性,成为自相似性。自相似性是指局部是整体成比例缩小的性质。

版本:Python 3

# Adapted from http://rosettacode.org/wiki/Fractal_tree#Python
# to parameterise, and add colour.
# http://pillow.readthedocs.org/
# Author: Alan Richmond, Python3.codes, and others (Rosettacode)
import math, colorsys
from PIL import Image, ImageDraw
spread = 17     # how much branches spread apart
width, height = 1000, 800 # window size
maxd = 12     # maximum recursion depth
len = 9.0     # branch length factor
# http://pillow.readthedocs.org/en/latest/reference/Image.html
img = Image.new('RGB', (width, height))
# http://pillow.readthedocs.org/en/latest/reference/ImageDraw.html
d = ImageDraw.Draw(img)
# This function calls itself to add sub-trees
def drawTree(x1, y1, angle, depth):
 if depth > 0:
  #  compute this branch's next endpoint
  x2 = x1 + int(math.cos(math.radians(angle)) * depth * len)
  y2 = y1 + int(math.sin(math.radians(angle)) * depth * len)
  # https://docs.python.org/2/library/colorsys.html
  (r, g, b) = colorsys.hsv_to_rgb(float(depth) / maxd, 1.0, 1.0)
  R, G, B = int(255 * r), int(255 * g), int(255 * b)
  #  draw the branch
  d.line([x1, y1, x2, y2], (R, G, B), depth)
  #  and append 2 trees by recursion
  drawTree(x2, y2, angle - spread, depth - 1)
  drawTree(x2, y2, angle + spread, depth - 1)
# Start drawing!
drawTree(width / 2, height * 0.9, -90, maxd)
img.show()
img.save("www.linuxidc.com.png", "PNG")

效果图如下:

Python 3 使用Pillow生成漂亮的分形树图片

总结

以上所述是小编给大家介绍的Python 3 使用Pillow生成漂亮的分形树图片,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
python实现绘制树枝简单示例
Jul 24 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
Python实现的密码强度检测器示例
Aug 23 Python
python如何实现int函数的方法示例
Feb 19 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
python3实现简单飞机大战
Nov 29 Python
python+selenium实现12306模拟登录的步骤
Jan 21 Python
python保存log日志,实现用log日志画图
Dec 24 #Python
Django 限制访问频率的思路详解
Dec 24 #Python
python 统计文件中的字符串数目示例
Dec 24 #Python
如何基于python操作json文件获取内容
Dec 24 #Python
解决python 读取 log日志的编码问题
Dec 24 #Python
python实现按关键字筛选日志文件
Dec 24 #Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 #Python
You might like
php 随机生成10位字符代码
2009/03/26 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python计算auc指标实例
2017/07/13 Python
python 动态加载的实现方法
2017/12/22 Python
python3.x实现发送邮件功能
2018/05/22 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
基于opencv实现简单画板功能
2020/08/02 Python
python中的时区问题
2021/01/14 Python
开学典礼主持词
2014/03/19 职场文书
《四季》教学反思
2014/04/08 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
新员工入职感想
2015/08/07 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫