使用python从概率角度绘制植物叶子!
想要绘制一个图形,那就必须知道这个图形的基本轮廓,基于这个轮廓的走势来进行绘图,这也是大多数绘图所采用的模式。在这里,我们脑洞大开一下,基于概率的角度出发来绘制一片植物叶子。
英国数学家Michael Barnsley描述了如何对一个点进行重复的简单变换,从而创建类似蕨类植物的结构。他提出了以下步骤来创建类似蕨类植物的结构,以(0,0)为初始点,按事先分配的概率随机选择下述变换规则。
第三方库:matplotlib(需自己安装)
代码:
import random
import matplotlib.pyplot as plt
def trans1(L):#变换1
x=0.85*L[0]+0.04*L[1]
y=-0.04*L[0]+0.85*L[1]+1.6
return x,y
def trans2(L):#变换2
x=0.2*L[0]-0.26*L[1]
y=0.23*L[0]+0.22*L[1]+1.6
return x,y
def trans3(L):#变换3
x=-0.15*L[0]+0.28*L[1]
y=0.26*L[0]+0.24*L[1]+0.44
return x,y
def trans4(L):#变换4
x=0
y=0.16*L[1]
return x,y
def getN(list):
r=random.random()#生成0-1的随机数
mp=0
List=[]
for i in list:
mp=mp+i
List.append(mp) #得到分布
for i,j in enumerate(List):#得到符合条件的下标
if r<=j:
return i
def transform(L):
w=[0.85,0.07,0.07,0.01]
index=getN(w) #得到下标
if index==0:
res=trans1(L)
if index==1:
res=trans2(L)
if index==2:
res=trans3(L)
if index==3:
res=trans4(L)
return res
def draw(n):
x=[0]#初始横坐标
y=[0]#初始纵坐标
x1=0
y1=0
for i in range(n):
x1,y1=transform([x1,y1])
x.append(x1)
y.append(y1)
return x,y
n=eval(input('please input the number of the pionts that you want to use:'))
x,y=draw(n)
plt.plot(x,y,'g*')
plt.title('The {0} pionts'.format(n))#设置标题
plt.axis('off')#隐藏坐标轴
plt.show()
结果:
注:此处使用了10000个点。
注:此处使用1000个点。
很显然,10000点的效果似乎比1000个点较好,当然,你也可试试100000个点,看看有什么效果!
学习的过程中从来都不是一帆风顺的,会遇到各种各样的困难,但一段时间后,回过头来看时,一定会发现不一样的精彩!
使用python从概率角度绘制植物叶子!相关推荐
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
文章目录 前言 一.ROC与AUC 1.ROC 2.AUC 二.代码实现 总结 前言 内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_ ...
- Python 三维动画生成 绘制螺旋线
原文链接: Python 三维动画生成 绘制螺旋线 上一篇: Python 三维曲线 下一篇: 英语文章背诵概率 效果 三维绘制曲线 ''' p1 x1,y1,z1 p2 x2,y2,z2 p3 x3 ...
- python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...
使用python图形模块turtle库绘制樱花.玫瑰.圣诞树代码实例 发布时间:2020-08-22 15:57:19 来源:脚本之家 阅读:76 作者:Soul fragments 今天为大家介绍几 ...
- 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程
用Python的turtle库绘图是很简单的,闲来无事就画了一个玫瑰花,下面奉上源码.... 源码: ''' Created on Nov 18, 2017 @author: QiZhao ''' i ...
- python画图代码七彩蟒蛇-Python实现七彩蟒蛇绘制实例代码
本文主要研究的是Python编程turtle的实例,绘制一个七彩蟒蛇..具体如下. 第2周的课后练习里,有一道题目,要求修改"蟒蛇绘制"程序,对Python 蟒蛇的每个部分采用不同 ...
- python如何计算概率事件_145、Python实现概率分布
一.概率分布 概率分布,是概率论的基本概念之一,主要用以表述随机变量取值的概率规律.为了使用的方便,根据随机变量所属类型的不同,概率分布取不同的表现形式. 概率分布包括离散概率分布和连续概率分布. 离 ...
- Python:Turtle图形绘制
Python:Turtle图形绘制 Turtle库 demo1.正方形螺旋线的绘制 (1)利用 turtle 库绘制一个正方形螺旋线 (2)绘制斜螺旋线 (3)绘制彩色斜螺旋线 demo2.经典蟒蛇的 ...
- 霍兰德人格分析:利用Python第三方库matplotlib绘制雷达图
美国约翰霍普金斯大学霍兰德教授认为,个人职业兴趣特性与职业之间应有一种内在的对应关系.根据兴趣的不同,人格可分为研究型(I).艺术型(A).社会型(S).企业型(E).传统型(C).现实型(R)六个维 ...
- python奥运五环_Python绘制奥运五环
绘制奥运五环主要涉及到Python中的turtle绘图库运用: turtle.forward(distance) 向当前画笔方向移动distance像素长度 turtle.backward(dista ...
最新文章
- java iterator 将int_ListIteratorlt;Egt; listIterator(int index)_Java.util包|WIKI教程
- 易语言基础编程知识〖E语言手册〗
- JAVA学习笔记(8)
- dll已加载但找不到入口点dllregisterserver_Java 是如何加载类的?
- 十五天精通WCF——第十一天 如何对wcf进行全程监控
- php 获取 table,php – 获取表对象(App_Model_TableName)作为获取结果(Zend Framework)
- command对象的ExecuteScalar方法
- iOS开发 UILabel实现自适应高宽
- SQL数据查询之——嵌套查询
- 如果创建表提示数据库已经存在该对象,那该怎么办
- 命令行模式下导入导出MySQL数据库
- wikisql 数据集解释_【wiki维基百科中文数据集】抽取wiki数据集——实操
- OA办公——SwebUI开源应用解决方案
- 『市场基础变量计算』
- leet code 006:ZigZag Conversion
- 《17.Deep Pyramidal Residual Networks》
- Social Recommendation with Strong and Weak Ties 学习笔记
- 3年风雨兼程-编程程软件测试终打破测试培训行业乱象
- python中bytes_Python3中的bytes和str类型
- FeedBurner: 使用RSS路由器的风险