Scratch画分形几何图形系列之37: IFS系统与混沌游戏

Scratch画分形几何图形系列之37: IFS系统与混沌游戏

首页休闲益智混沌多边形更新时间:2024-04-20

Scratch画分形几何图形系列之37: IFS系统与混沌游戏

本系列的前面部分大都用的L系统画分形几何图形,本篇开始,我们准备用IFS系统(迭代函数系统)来画一系列的分形图。

(一)IFS系统及其应用:

IFS是Iterated Function System的简称,即迭代函数系统,通过对随机均匀分布的大量点进行迭代的变换,得到具有一定重复性特征的图形,是分形的另一个重要的分支。它是分形图像处理中最富生命力而且最具有广阔应用前景的领域之一。这一工作最早可以追溯到Hutchinson于1981年对自相似集的研究。美国科学家M.F.Barnsley于1985年发展了这一分形构型系统,并命名为迭代函数系统(Iterated Function System,IFS),后来又由Stephen Demko等人将其公式化,并引入到图像合成领域中。IFS将待生成的图像看做是由许多与整体相似的(自相似)或经过一定变换与整体相似的(自仿射)小块拼贴而成。

迭代函数系统存在自相似性,每个分形系统的图片都可以由n组仿射变换来描述。

IFS中要根据不同概率,选取不同仿射变换机制,这就像玩游戏,也叫混沌游戏,它是确定与随机的有机结合,变换规则是确定的,但是画的点却是随机的,然后就出现了美妙的分形图像。

吸引子:在混沌游戏中,一个系统有朝某个稳态发展的趋势,这个稳态就叫做吸引子。对于分形系统,系统最终稳定的吸引子是一个确定的点,吸引子中的各个元素是吸引子的变换形式,这些吸引子经过不同的变换聚合在—起就成了最终稳定态的吸引子。

IFS系统每隔一定的迭代次数就会收集当前点,可以理解为点的轨迹的集合。

IFS利用分形的自相关性的性质,常用于图像压缩。分形图像压缩的解码速度很快,但编码速度慢,比较适合一次写入、多次读出的文档。

(二)IFS系统迭代公式为

仿射变换的两种迭代式

对于式中的仿射变换系数e,f 为子图相对于原图平移量, θ,φ 为子图相对于原图的旋转量, r,s 为子图相对于原图缩放系数。是相应于i的概率。

(三)IFS系统有以下特征:

对于每次迭代,都要进行一次线性变换并接上一个平移,我们说这是仿射的。

为了保证系统是收敛的,所以仿射变换一定是压缩映射。任意图形经过仿射变换后,面积为变换前的|ad-bc| 倍,这里有 |ad-bc|<1 。

IFS将待生成的图像看做是由许多与整体相似的(自相似)或经过一定变换与整体相似的(自仿射)小块拼贴而成。所以,IFS是完备度量空间中的一个收缩映射的有限集。

仿射变换系数会有多组取值,每组取值都会有一个概率,我们称这是带概率的IFS系统,并把所有取值的集合称为IFS码。每次迭代的时候,按照概率选取一组取值进行仿射变换。所以,对于某一时刻的迭代,是线性的,但对于整个过程的迭代,是非线性的。

(四)便于理解,我们举一个具体例子来说明IFS系统是如何工作的(相当于伪代码):

(1).构想出一个原始的分形图案,我们不妨称之为分形元,这里的分形元就是最大的那个三角形;

(2).确定总图案是由多少个由分形元缩放仿射变换拼接而成的,与之对应的,我们就应该设计多少组仿射变换系数,这里因为是由3个自相似的图案构成的,所以我们需要设计(3)组系数:.因为每一组系数是独立的,所以下面各步只以第一组系数(即紫色部分)的设计为例,其他系数如法炮制即可。

(4)确定缩放系数r、s:r、s分别是x方向和y方向的缩放比,这里是缩小,取r=0.5,s=0.5.

(5)确定 θ,φ: θ,φ 分别对应xy方向的旋转角度,这里没有进行旋转,故 θ=0,φ=0.

(6)确定 e,f: e,f 分别对应xy方向的平移距离,这里没有进行平移,故 e=0,f=0.(另外两个分别是e=0.5,,f=0和e=0.25,f=0.433013)。

IFS画谢尔宾斯基三角平移数据示意图

(7)确定取值概率p: 对应点的分布情况,这里是平均分布,故 p=1/3≈0.333333.

(8)代入式中即可设计出第一组系数[.5, 0, 0, .5, 0, 0, 1. / 3.],循环步骤4-7既可得到其他组的系数。

a b c d e f p

0.500000 0.000000 0.000000 0.500000 0.000000 0.000000 0.333333

0.500000 0.000000 0.000000 0.500000 0.500000 0.000000 0.333333

0.500000 0.000000 0.000000 0.500000 0.250000 0.433013 0.333333

(9)根据数据建立相应的函数,根据概率确定函数选择哪一组数据,然后在坐标平面上把各组变换后的数据打印出来。

(五)编程实现:

(1)先根据IFS的abcdef数据,自定义一个子积木(函数):

仿射函数自定义积木

(2)根据相应的概率,确定选择哪一组数据(混沌游戏):

游戏规则

(3)建立主程序,选定x,y的初值,选定适当的初始坐标位置本例是左下角(-180,-175),并将变换后的x,y值扩大适当倍数(本例是400倍)作为横纵方向的平移值:

画点主程序

(4)IFS系统画出的谢尔宾斯基三角分形图

可以看到,每一组取值都会形成一个缩小版的自相关的图案。又因为sierpinski三角由3个自相关的缩小的图案拼接而成,刚好对应IFS码中的三组取值。

(六)拓展:如果我们修改IFS码的概率,分别修改为0.1,0.2,0.7,看看图形是什么样子?从形成的图可以看出来,IFS码的概率影响每个点分布情况。由于第一组取值概率最小,所以分布在靠近左下顶点处的点较少,同理,其他位置也如此分析即可。

改变游戏规则(概率分配)的谢氏三角

(七)基于上面这个规律,我们可以粗略地体会IFS码的设计步骤,由于sierpinski三角是比较规则和简单,所以上面设计略为简单。但其实对于一些较为复杂的图案,旋转、平移、缩放量有时是很难看出来的,所以各系数是较难设计的,而且得不断调参才能得到充满艺术感的图案,这一点跟深度学习调参“炼丹”是很像的。不过后面我们会列举丰富的案例,用IFS系统画出较多丰富多彩的分形图,进而帮助大家在实践中加深理解。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved