当Python遇到分形数学魔法 --> 树叶

本文介绍如何使用Python中的迭代函数系统IFS创建分形树叶图案。通过4组线性函数和随机选择概率,经过大量迭代生成10万个点,形成高度自相似的树叶图像。IFS算法展示了分形的神奇魅力。文章还提及了numpy在提高计算效率中的作用,并提供了相关Python编程书籍推荐。
摘要由CSDN通过智能技术生成

迭代函数系统 - iterated function system是一种创建分形图案的简单算法。下面我们用迭代函数系统来凭"空"生成一片树叶。下面的4组线性函数均可以根据一个二维平面点的点坐标(xi,yi)计算得到一个新的点坐标(xi+1,yi+1)。

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

函数组0,选择概率0.01:
在这里插入图片描述
函数组1,选择概率0.07:
在这里插入图片描述
函数组2,选择概率0.07:
在这里插入图片描述
函数组3,选择概率0.85:
在这里插入图片描述
整个计算过程也是迭代的,我们首先选择坐标原点(0,0)作为(xi,yi),选择上述函数组中的一个生成新坐标(xi+1,yi+1),然后再把新坐标作为(xi,yi),选择上述函数组中的一个计算得到下一个平面坐标点。在重复10万次后,我们就得到了平面上10万个点,将这10万个点在平面上画出来,即得该迭代函数系统的分形图案。

那么,在迭代时,选择哪个函数组进行迭代计算呢?答案是在符合概率要求的条件下随机选择。我们为每个函数组指定了选择概率,分别是1%,7%,7%和85%。可以看到,函数组3被选择的概率最高。

这次我们先看看绘图结果,如下。Amazing! 在只有数个参数的情况下,IFS成功地构造了树叶。读者可以点击左下方的放大镜,然后按住鼠标左键框选放大,可以看到,树叶中的某片子树叶,跟整片树叶一模一样!图像表现出高度的自相似性。
在这里插入图片描述
接下来分析代码。下面使用到的numpy是用C语言书写的多维数组模块,它是scipy等科学计算模块的基础。读者可以把numpy简单看作是多维的速度更快的列表(list)。numpy包可以在Windows命令行或者Linux终端中使用pip install numpy命令进行安装。

#IfsLeaf.py
import numpy as np
from matplotlib import pyplot as plt

def ifs(p,eq,n):
    p = np.cumsum(p)              #对概率列表进行累加运算
    rands = np.random.rand(n)          #生成n个值域为[0,1)的随机数
    select = np.searchsorted(p,rands)      #生成方程组选择数组

    result = np.zeros((n,2),dtype=np.float)    #n行2列的结果数组,元素值初始化为0
    c = np.zeros(n,dtype=np.float)        #n个0值构成的c数组,用于表示点的颜色

    #值为[0,0,1]的当前点坐标数据,可以视为3行1列的矩阵
    pos = np.array([0,0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值