您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页分形图形的模拟实现

分形图形的模拟实现

来源:爱玩科技网
分形图形的模拟实现

摘要

通过对分形理论的认识和相关定理的理解,做出了一些比较典型的分形图形并实现了自己想象中的一批奇特的图形。简要介绍迭代函数系统的基本理论,讨论了IFS码的提取方法,并且分别实现了典型的Koch曲线、koch雪花和拓展的Koch曲线;同时利用随机迭代函数系统实现了蕨类植物图形模拟,并讨论了概率的选取对产生分形图的影响;在复平面上的Mandelbrot集和Julia集是分形图形很有趣的一个领域,利用逃逸时间算法,实现了上述两种图形,并利用Matlab强大的图像处理能力,对其进行着色处理,得出了丰富多彩的分形图形;另外,也实现了广义的Mandelbrot集和Julia集。同时对二者之间的关系也有了新的认识。

关键词:分形图形;仿射变换;迭代函数系统;Matlab;Koch曲线;逃逸时间算法;Mandelbrot集;Julia集

A simulative realization of a fractal graphics

Abstract

Based on the cognition of fractal theory and the understanding of theorem concerned, some typical fractal graphics and a set of imaginary graphics have been realized in this article. The theory of Iterated Function Systems(IFS) was concisely described and the parameter design of IFS was discussed. Koch curve, Snow graphics and Generalized-Koch curve were realized afterwards. Meanwhile, by means of IFSP, fern graphics was simulated and the probability of the attractor of IFS were discussed. In plural plane, Mandelbrot set and Julia set are a very interesting field, the above two graphics have been realized through the escape time algorithm, Color up the image by powerful image processing ability of Matlab, and some rich and colorful fractal graphics were realized.

. Besides, the paper realized generalized Mandelbrot set and Julia set, got some wonderful graphics. at the same time we have new understanding about the relationship of the both sets. Keywords: fractal graphics; affine transformation; IFS; escape time algorithm

Matlab; Koch curve; Mandelbrot set; Julia set

1

第一章 引 言

自然界是复杂和美丽的。过去由于理论计算和实验技术的局限,科学家们无法对自然界做完美的描述;传统的科学只能把复杂的问题简化成为一个线性问题来研究。对自然界中出现的非线性现象也只能按线性理论作一定的微扰处理。而如今由于分形理论研究的逐步深入以及计算机学科的突飞猛进,使得这二者得以完美的结合,我们获得了许多过去难以想象的分形图形的模拟实现[2]。

本文旨在利用分形理论的研究成果帮助我们实现一系列复杂的自然景物图像的模拟实现,这些景物有的具有良好的自相似性,有的则看似无章可循,但它们都是我们分形理论的研究对象,因此如果将分形理论与计算机相结合,实现这些图像还是很得心应手的。

本文并没有对分形理论有过多的阐述,而是利用分形理论的一些成熟的研究成果,实现了对分形图形的模拟,特别是利用L系统,迭代函数系统(IFS系统)可以对这些图形作出很好的模拟,甚至可以实现一些现实中不存在,但又奇妙异常的图形。

分数维图形可以模拟天际的积云、空中的闪电、地上的森林、海上的浪花、燃烧的火焰、树木的生长以及如分子、粒子的运动等物理现象。可以用分形图设计壁纸。地板革、地板砖、纺织品等日用品的图案。众所周知,迭代函数系统是构造分形图的重要方法之一,IFS为计算机模拟一些自然现象的真实感图形提供了一个有力的工具。特别是利用带有概率的IFS即IFSP算法绘制分形图,与单纯迭代法绘图相比,不仅实现的代码简单,而且降低了对计算机硬件的要求[5]。

这篇论文分为四章,第二章主要介绍了分形理论的的相关背景和其应用,第三章则主要介绍了迭代函数系统(IFS),因为这是实现分形图形的重要理论基础,接着提供了一些常用的提取IFS码的方法;第四章则围绕这篇论文的主题分形图形的模拟实现,给出了分形图形实现算法,同时由于IFS码的重要性,又添加了一个提取IFS码的实例,增加文章的可读性;第五章,则对分形图形中十分重要的Mandelbrot集和Julia集进行了实现并对广义的M集和J集。最后我们通过MATLAB编程实现算法,并将一批典型的比较经典的分形图成功的实现了。

2

第二章 分形理论相关背景及应用

2.1分形理论的介绍

分形(fractal)这个名词是Mandelbrot在20世纪70年代为了表征复杂图形和复杂过程首先引入自然科学领域的,它的原意是不规则的,支离破碎的物体。

分形可以分为规则分形和不规则分形。在分形名词使用之前,一些数学家就提出过不少复杂和不光滑的集合,如Cantor集,Koch曲线,Sierpinski垫片,地毯和海绵等。这些都属于规则的分形图形,它们具有严格的自相似性。而自然界的许多事物所具有的不光滑性和复杂性往往是随机的,如蜿蜒曲折的海岸线;变换无穷的布朗运动轨迹等。这类曲线的自相似性是近似的或统计意义上的,这种自相似性只存在于标度不变区域,超出标度不便区域,自相似性不复存在。这类曲线为不规则分形。

迄今为止,分形还没有一个严格的定义。1982年Mandelbrot将分形定义为Hausdorff维数大于拓扑维数的集合。1986年,Mandelbrot给出了一个更广泛,更通俗的定义:分形是局部和整体有某种方式相似的形,该定义强调图形中的局部和整体之间的自相似性。

一般认为分形是一个具有以下性质的集合F 1) 2) 3) 4) 5)

F具有精细结构,即在任意小的比例尺度内包含整体。 F是不规则的,以至于不能用传统的几何语言来描述。 F通常具有某种自相似性,或许是近似的或许是统计意义下的。 F是某种方式下定义的“分维数”通常大于F的拓扑维数。 F的定义常常是非常简单的,或许是递归的。

自相似分形是具有几何相似的分形,它的特点是局部与整体具有一定比例的几何相似性,利用这种自相似性,可用迭代函数来描述它的位置,图形。

说道分形,就要提到几何图形的维数,一般将维数理解为图形中确定一个点的位置需要的坐标数,如直线维数是1;方形,圆,椭圆等平面图形维数是2;立方体,球等立体图形的维数是3。

我们也可以将Hausdoff测定分形维数的方法加以推广,利用以下的公式从测度的角度把规则图形的维数D确定为

DlnN()/ln(1/) (0)

公式1

这里的ε是测量单元的尺寸,N(ε)是测度得到的规则图形的测量单元数,ε的缩小使N(ε)增大。如ε由1减小为1/2n时,测量正方形得到的N(ε)由1增大为4n,由上式得到维数2;如ε由1减小为1/2n时,测量立方体得到的N(ε)由1增大为8n得到维数为3。

不规则分形只具有统计意义下的自相似性。不规则分形种类繁多,它可以是离散的点

3

集、粗糙曲线、多枝杈的二维图形、粗糙曲面、以至三维的点集和多枝杈的三维图形。目前测定不规则分形的方法很多,主要有:粗糙曲线的圆规维数、从周长-面积关系或表面积-体积关系求分维、盒维数法、Sandbox法、面积-回转半径法、变换(Variation)法、密度-密度相关函数法等[2]

2.2分形理论的应用

分形理论是一门新兴的非线性科学,它给自然科学、社会科学、工程技术、文学艺术等极广泛的学科领域,提供了一般的科学方法和思考方式。就目前所知,它有很高程度的应用普遍性。这是因为,具有标度不变性的分形结构是现实世界普遍存在的一大类结构。此处结构的含义十分丰富,它不仅指研究对象的空间几何形态,而是一般地指其拓扑维数(几何维数)小于其测量维数的点集,如事件点的分布,能量点的分布,时间点的分布,过程点的分布,甚至可能是意识点、思维点的分布。

分形几何学已在自然界与物理学中得到了应用。如在显微镜下观察落入溶液中的一粒花粉,会看见它不间断地作无规则运动(布朗运动),这是花粉在大量液体分子的无规则碰撞下表现的平均行为。布朗粒子的轨迹,由各种尺寸的折线连成。只要有足够的分辨率,就可以发现原以为是直线段的部分,其实由大量更小尺度的折线连成。这是一种处处连续,但又处处无导数的曲线。这种布朗粒子轨迹的分维是 2,大大高于它的拓扑维数 1。

在某些电化学反应中,电极附近成绩的固态物质,以不规则的树枝形状向外增长。受到污染的一些流水中,粘在藻类植物上的颗粒和胶状物,不断因新的沉积而生长,成为带有许多须毛的枝条状,就可以用分维。

自然界中更大的尺度上也存在分形对象。一枝粗干可以分出不规则的枝杈,每个枝杈有人研究了某些云彩边界的几何性质,发现存在从 1公里到1000公里的无标度区。小于 1公里的云朵,更受地形概貌影响,大于1000公里时,地球曲率开始起作用。大小两端都受到一定特征尺度的,中间有三个数量级的无标度区,这已经足够了。分形存在于这中间区域。

近几年在流体力学不稳定性、光学双稳定器件、化学震荡反映等试验中,都实际测得了混沌吸引子,并从实验数据中计算出它们的分维。学会从实验数据测算分维是最近的一大进展。分形几何学在物理学、生物学上的应用也正在成为有充实内容的研究领域

4

继续分为细杈„„,至少有十几次分支的层次,可以用分形几何学去测量。

第三章 如何提取IFS码

3.1

IFS基本理论

对于分形空间((x),h)上的压缩映射wi:(X)(X),其压缩因子ci(i1,2,...n).定义映射W:(X)(X),即:

W(B)w1(B)w2(B)...wn(B)wi(B),B(X)

i1n公式2

则W是压缩映射,且压缩因子cmax{c1,c2,...,cn},即:

h(W(A),W(B))c*h(A,B),A,B(X)。

公式3

由这n个压缩映射wi:(X)(X),及其压缩因子ci(i1,2,...n)组成一个迭代函数系统IFS。

压缩映射不动点定理:设{X;w1,w2,...,wn;c}是(X,d)上的一个IFS,压缩变换W存在唯一的不动点A(X),满足AW(A,而且不动点可以通过迭代得到,即)w)i(Ai1nAlimWn(B),Bn(X。)

拼贴定理:给定集合L(X)和ε>0,若能找到一个IFS{X;w1,w2,...,wn;c}使

h(L,w(L)),则:

i1nh(L,A)h(L,wi(L))i1n1c1

公式4

其中:A是IFS不动点,亦即吸引子。

该理论说明,对于L,如能找到一个IFS,使L恰为IFS的吸引子,则L完全由IFS确定。根据不动点A是复制它本身的变换W(A)构造出来的,因此,对L进行压缩变换,然后把它们粘贴到一起,用“拼贴”W(L)近似表示L。[5]

5

3.2

主要提取方法

已有的提取IFS码的方法

对于规则的图形如我们熟知的Sierpinski垫片,因为我们已经知道压缩仿射变换中的六个参数所起的作用,再根据图形本身的几何关系,其IFS码可以比较容易的得出。对于不规则但具有分形特性的图形提取IFS码的方法主要有以下几种:

最初的方法

对那些经典的已知的某景物的IFS参数,改变它的某些参数值或加入随机因素来得到此景物新的IFS参数,然而对那些无已知参数的景物就为力了。[2]

三点法

我们知道,一般具有分形特征的自然景物图形,它必然存在一些有特征性的点。由于整体和局部的相似性, 整体存在一些有特征性的点, 局部也必然相应地存在一些有特征性的点。由于局部是由整体仿射变换而来,则局部上的一些有特征性的点必然也是由整体上的一些有特征性的点经过同样的仿射函数变换而来。同时我们还知道, 通过三对点(整体上的三个点和局部上对应的三个点), 我们就可求出一个仿射变换。基于这个道理, 我们只要在整体轮廓上选取三个有特征性的点,然后再在各个局部轮廓上按相同的顺序选取对应的三个有特征性的点。这样根据这些点,就可以获得整体到各个局部的仿射变换。

具体步骤如下: 1.在原图上取三点:x1,的取三点: x1','y1'﹑x2,y1﹑x2,y2﹑x3,y3,然后在每一个拼贴子图上相应

'y3。

'y2﹑x3',选取点时注意:①选取的三点最好不使之形成钝角三角形,并尽量能体现图形的整体信息,如选最上、最左、最右或最下的三点②小拷贝上点的位置要尽量与整体上点的位置相对应,即小拷贝上取的三点尽量为整体上的三点在压缩映射作用下在小拷贝上的象。

2.将这六个点分别代入公式

x'axbye y'cxdyf公式5

其中,x,y为原图坐标,x',y'为拼贴子图坐标。

3.采用三点对应解线性方程组的方法来求取仿射变换系数a,b,c,d,e,f。

4.各个仿射变换的概率可以通过padbc计算得到,最后应对概率集归一化,使其和pj(j1,2,...,n)1。至此可得到所求的IFS码。[6]

6

第四章 分形图形算法的得出

根据以上理论事实并参考相关文献,我们得出了对于一般分形图形实现的算法。对于分形图形,一种我们可以利用线段拟和,只需确定两点坐标位置,连线画出即可,另一种则需要根据图形特征,逐步分析提取IFS码,并利用概率分布,得到IFSP码,用点模拟,因此我们提供了两种算法,分别针对上述两种图形的模拟实现。

对于规则的自相似图形,典型的有分形树,Koch曲线等,由于它们都具有良好的自相似性,并且显然的直线性,因此只要找出它们的递归特性就可以利用递归函数,采用线段拟和,递归出口为线段长度的一个限值。

对于不规则的分形图形,比如蕨类植物,Levy曲线等,我们则可以利用上一章提到的4.1 具有严格自相似性分形图形的算法

我们选择具有代表性的分形树为例,我们观察到二维分形树的树干和树枝具有良好的自相似性,即图形局部放大后可以与整体等同。

构造一个递归函数,给出两个象素点的位置便可将两点连线画出,递归出口为线段长度的一个限值,可以根据需要和硬件条件设定,具体思路如下:

 首先,我们向函数传递的是树根或树枝末端点坐标以及线段长度、与横坐标所夹角度,

通过函数调用得到的是树顶或树枝顶端点坐标:

假定A(x1,y1)为枝末节点,B(x2,y2)为枝顶节点,AB与主枝所夹角度为θ,亦即相对角度,l为树枝长度,则

提取IFS码,找出图形的统计自相似性,再利用迭代函数逐步的用点拟合。

x2x1l*cosx2x1l*cosy2y1进而我们得出,利tan,x2x1y2y1l*siny2y1l*sin用这一方程组,我们就可以根据A点坐标、线段长度、所夹角度将B点坐标求出,两点连线

AB即为所求。

 然后,我们注意到AB既可看为主枝,又可视为侧枝,这是又自相似性决定的,满足了

递归的性质:

在AB上取一点A1作为树根或枝末节点,偏转角度选定,线段长度确定,同理亦可得到树顶或枝顶节点B1,连线画出A1B1,接着再在A1B1上取点画线,依此类推,直至线段长度小于某一限值,这时便将分形树描绘出。在我的程序里,我将每一最小相似形中的主枝上设定了最多为七棵侧枝。

7

得出图形:

图1:分形树

4.2 利用IFS码/IFSP码模拟图形的算法

迭代函数系统IFS的理论和方法是分形自然景观模拟的理论基础。迭代函数系统采用确 定性与随机性相结合的方法生成植物秆茎或叶片。“确定性”指用以迭代的规则是确定性的,它们由一组仿射变换构成;“随机性”指迭代过程是不确定的,每一次迭代用哪一个规则,不是预先定好的,而是随机的。设最终要生成的图形为M,它要满足下述几何方程:

Mw1w2…wN

公式6

上式含义是,随机地从wi(i1,…,N)中挑选一个迭代规则迭代一次,然后在随机地在

wi(i1,…,N)中选一个规则迭代下一次,不断重复此过程,最后生成地极限图形M就是欲求地形态。

具体的提取IFS码,可以参照上一章,这里我们再简单的描述一下。 IFS的压缩映射wi的参数设计

由分形图的相似结构,每个压缩映射wi是由平移、旋转和比例3种变换以及它们的复合变换构成的仿射变换,二维形式为:

xaiwiyci10

8

bidi0eixfiy

11公式7

其中参数ai,bi,ci,di由旋转、比例变换所决定的实数;ei,fi由平移变换所决定的实数。 IFS吸引子自然景观的模拟总是在一个矩形区域内进行,取度量空间0,1*0,1,d,由于

wi0,1*0,10,1*0,1。因此,参数ai,bi,ci,diei,fi的取值范围在1,1;ei的取值影

在平面欧氏空间R2中,仿射变换有下面两种形式:[1]

响植物x方向的偏离程度,一般取值为正。

xr*cosf1yr*sinxr*cosf2yr*sinr*sinxe,

r*cosyf公式8

r*sinxe,

r*cosyf公式9

其中θ称为转角,r是相似比。相似变换可以分解成以下四种基本的相似变换:[1] (1)旋转变换R:

xcosRysinsinx cosy公式10

它是绕坐标原点逆时针旋转角度θ的变换。 (2)反射变换R:

x10xR y01y公式11

它是以x轴为反射壁的变换。

(3)伸缩变换Ф:

 y0ry公式12

它是沿极线方向伸缩r倍的变换。 (4)平移变换T:

xr0xxxeT yyf公式13

这样上述相似变换可以分别写成这些基本变换的复合:

f1TR,f2TRR.

9

公式14

下面举Koch曲线为例:

它可以看成是一单位长线段经过下列4个仿射变换迭代生成。

1/301/301. 缩小至原长1/3;伸缩变换,0,f

01/301/3cos60o1/30o

2. 缩小至1/3:;旋转60:Ro01/3sin60sin60o1/23/2;右平cos60o1/23/2e1/3移1/3:;

f0得

xx1/3*cos60ofRToyy1/3*sin601/3*sin60ox1/3; o1/3*cos60y0出IFS码a1/6,b3/6,c3/6,d1/6,e1/3,f0; 3. 缩

1/3:

1/3001/33/2; 1/2;旋转-60o:

cos(60o)sin(60o)1/2Roosin(60)cos(60)3/2e1/2右平移1/2,上移3/6:;

f3/6xx1/3*cos(60o)1/3*sin(60o)x1/2fRT;得出IFS码:ooyyy1/3*sin(60)1/3*cos(60)3/6a1/6,b4. 缩

3/6,c至

3/6,d1/e6,1/f2, 3/6;;

2/3:

1/3:

1/3001/3 10

e2/3;f0xx1/30x2/3fT。 yy01/3y0生成的IFS码如下:a1/3,b0,c0,d1/3,e2/3,f0; 利用以上分析,我们得出Koch曲线的IFS码

表1:Koch曲线IFS码 a b c d e W1 1/3 0 0 1/3 0 W2 1/6 -0.288 0.288 1/6 1/3 W3 1/6 0.288 -0.288 1/6 1/2 W4 1/3 0 0 1/3 2/3 得出的曲线

f 0 0 0.288 0

图2:Koch曲线

接下来,我们利用这里的方法作出一个新的分形图形,同样是先提取IFS码,然后利用迭代函数迭代画出图形,程序与Koch曲线的得出基本相同,只是提取出的IFS码不同,结果如下:

表2:Snow图形IFS码 W1 W2 W3 W4 W5 W6 a 1/3 1/6 b 0 0.288 c 0 d 1/3 e 0 1/6 f 0 0.288 0.288 0 -0.288 -0.288 -0.288 1/6 0 -1/6 0.288 -1/3 0 1/6 -0.288 -1/6 1/2 -1/3 2/3 -1/6 1/2 1/6 1/6 -1/6 -0.288 0.288 -0.288 0.288

11

图3:Snow图形

作图中要注意的是可能分枝方向会弄错,例如可能会把雪花一半向内生长,一半向外生长,这时可以考虑旋转角度加大180o。

图4:Sierpinski地毯

表3:Sierpinski地毯IFS码 W1 a 1/2 b 0 c 0 d 1/2 e 0 f 0 0 W2 -1/4 0.433 -0.433 -1/4 1/4 0.433 W3 -1/4 -0.433 0.433 -1/4 1/2 扩展的Koch曲线

图5:扩展的Koch曲线

而在自然景物的模拟中,我们则需要用到IFSP码,这是一种随机算法,具体步骤如下: 1o 取初始点x0,及总的迭代步数; 2o 以概率pi(i1,2,…,N)选取变换fi;

12

3 把fi作用到x0上,得新点,记newxfi(x0); 4o 令x0newx;

5o 重返2o,进行下一次迭代。当迭代次数大于某预先给定的数,开始在屏幕上打出点。直到迭代大于总步数为止。

流程图如下:[2]

开始 o

仿射变换系数设定 设定起始点(x0,y0),总迭代步数N,总点数M 产生一随机数决定用第几个Ri (x1,y1)=Ri(x0,y0) 机器解释,绘图 x0=x,y0=y1,n=n+1 Yes n>N? No 打印(x0,y0),m=m+1 m>M? No Yes 结束

图6:IFSP流程图

关于IFSP码的构造,这里就不再深入探究了。

这里就利用现成的比较成功的IFSP码,如蕨类植物:[2]

13

表4:蕨类植物IFSP码

a b c d e W1 0 0 0 0.170 0 W2 0.155 -0.235 0.196 0.186 0 W3 -0.155 0.235 0.196 0.186 0 W4 0.850 0.025 -0.025 0.850 0 f 0 0.9 0.4 0.9 p 0.01 0.07 0.07 0.85 下面我们就利用这IFSP码编程对蕨类植物图形进行模拟,在MATLAB下已实现。 具体程序见附录B,迭代次数为100000次。

这里要注意:理论上讲仿射变换的概率不会影响最终的迭代结果,只要满足:

pi1Ni1,pi0(i1,2,…,N),

p1,p2,…pN的大小分配并不影响最终吸引子,也就是绘制的图形完全由wi(i1,…,N)确定,与pi(i1,…,N)无关,pi(i1,…,N)只是为编程绘图提供了极大的方便,pi(i1,…,N)的大小分配只影响绘图的速度,即迭代次数。

例如我们可以选择每个迭代函数概率相同,这样我们得到如下图形,迭代次数为1000000次

查阅相关资料,我们得出各个仿射变换的概率可以通过padbc计算得到,最后对概率集归一化,使其和pj(j1,2,...,n)1。至此可得到所求的IFSP码。

利用这一原则,我们对w1,w2,w3,w4的概率加以计算得出

14

图7:蕨类植物

第五章 Mandelbrot集和Julia集生成

上面介绍的一些二维迭代是在实平面上进行的。在复平面上,我们则可以得出更加丰富多彩的图形,典型的有Mandelbrot集和Julia集图形。 5.1

Julia集的定义与生成

Julia集是由法国数学家Julia和Faton在发展了复变函数迭代理论的基础上获得的。在复平面C上,利用复变函数f(z)z2c迭代可生成一个非常复杂的集。[6] 令zxiy,caib,x,y,a,bR,由f(z)z2c可得

22xk1xkyka yk12xkykb公式15

15

迭代过程中,如固定参数c,而考虑z得变化,则称Z平面为动态平面,按上式反复迭代得到得数集,称为Julia集。在进行迭代时,每次以新得坐标替代旧坐标进行下一次迭代。为了观察逃离速度,可以规定一个距离函数[8]

D(xiy)(xiy)x2y2

计算例如D>20所需迭代次数,如果某点经过300次迭代仍未逃离,就可以认为它属于J集,对于趋于内部得点也可以类似处理。

在计算机上画映射f(z)z2c的Julia集可用逃逸时间算法,算法如下:[1]

1. 选定参数Cpiq,,取xminymina(如1.5),xmaxymaxb(如1.5),取R充分大。定义发散区域V{(x,y)R2|x2y2R2},当某轨道进入区域V时,就认为该轨道是发散的。

设x(xmaxxmin)/(M1),y(ymaxymin)/(N1)。[10]对所有象素点

(i,j),i1,2,...,M,j1,2,...,N,完成下面过程。

2. 设x0xmini*x,y0yminj*y,k0.

3. 作迭代:利用迭代方程 作迭代,由(xk,yk)计算(xk1,yk1),k=k+1; 4. 作判别:计算rx2y2,

(i) (ii) (iii)

下面我们就可以利用这一算法得出美妙的Julia集了!

下图是C=-0.2+0.75i时作出的Julia集图形,右图是根据迭代次数的不同所着颜色的彩色Julia集图形。具体程序参考附录。

若r>R,取颜色k,转到第4步; 若k=K,取颜色0,转到第4步; 若r≤R,且k5. 在象素点(i,j)上着第k种颜色,转到下一个点并从第1步开始。

2图8:C=-0.2+0.75i,Zn1ZnC

16

2图9:C=0.3+0.111i,Zn1ZnC

5.2 Mandelbrot集的定义与生成

Mandelbrot集被认为是把自相似的外形与无限变化的性质结合起来的一个分形。J集是给定C后对复变量Z进行分类;而M集则是在复参数C填充的平面上对参数C进行分类得到的图形。

生成Mandelbrot集的具体算法与Julia集基本相同,得出的图形如下:

图10:Mandelbrot集

具体算法见附录。

5.3 广义Julia集与Mandelbrot集

通过上述Julia集和Mandelbrot集的研究,我不禁想到了对二次Julia函数和Mandelbrot函

17

数进行拓展,如三次,四次乃至n次函数,只要利用一定的复变函数知识对多次复变函数进行展开,实部与虚部分开,参照二次情形便可得出。限于篇幅,这里只对三次Julia集和Mandelbrot集进行一下模拟实现,得出了另一组神奇的分形图形。

3图11:C=-0.2+0.75i,Zn1ZnC

图12:三次的Mandelbrot集

可以看出三次的Julia集和Mandelbrot集依然具有自相似性,不过图形已经与二次完全不同了,只要愿意我们可以作四次,五次,乃至n次的Julia集或Mandelbrot集。得出的图形也是奇妙异常。

第六章 结论

1. 在利用IFS码实现分形图形中,我发现,利用仿射变换仅仅能对长度单位为1的线段进行迭代并实现图形,这就有很大的制约,在实现Julia集时得到启示,我们可以利用坐标,如对Koch曲线:

18

设P(xp,yp),Q(xq,yq) 得出 OPxpiyp,OQxqiyq

1212121OAOPPA(OQOP)OPOPOQ(xpxq)i(ypyq)3333333

OBOAABOAPA(cosisin)33

113OA(OAOP)(cosisin)OPOQ(OPOQ)i33226

2121212OCOPPC(OQOP)OPOPOQ(xpxq)i(ypyq)3333333

B P A C Q

xa2121xpxq,yaypyq3333

xb1133xpxq,ybypyq2266 1212xcxpxq,ycypyq3333

这样得出各点坐标,然后连线画出,这比单纯利用IFS码方便并且可以适应其它情形,如任意给定两点坐标和迭代次数便可得出Koch曲线。

2. Mandelbrot集与Julia集有着千丝万缕的联系,首先它们都具有自相似性,Mandelbrot集的另一个特性是在M集中任选一点C,通过把它附近越来越小的片断放大,就会找到对应于这个C值的J集。换句话说,M集概括了所有的J集,它是无穷数量的J集的直观的图像目录表。因此常常把M集称为是J集的缩微字典。[2]

19

附录

附录A:

分形树模拟实现程序: function Ftree(x,y,length,fai) clc g=0.618; thita=60.0;

x1=x-length*cos(fai*pi/180.0); y1=y+length*sin(fai*pi/180.0); plot([x,x1],[y,y1]); axis equal hold all; if(length<10) return end

nlength=length; nx=x; ny=y; for count=1:7

nx=nx-nlength*(1-g)*cos(fai*pi/180.0); ny=ny+nlength*(1-g)*sin(fai*pi/180.0); Ftree(nx,ny,nlength*(1-g),fai+thita); Ftree(nx,ny,nlength*(1-g),fai-thita); nlength=nlength*g; end

Koch曲线模拟实现程序: function Koch(x,y,i) i=i+1; if i>4

return end

x11=0.333*x; y11=0.333*y;

x12=0.167*x-0.288*y+0.333; y12=0.288*x+0.167*y;

20

x13=0.167*x+0.288*y+0.5; y13=-0.288*x+0.167*y+0.288; x14=0.333*x+0.667; y14=0.333*y; if i==4

hold all; axis equal; plot(x11,y11); plot(x12,y12); plot(x13,y13); plot(x14,y14); end

Koch(x11,y11,i); Koch(x12,y12,i); Koch(x13,y13,i); Koch(x14,y14,i);

蕨类植物模拟实现程序: clc,clear;

a=[0,0.85,0.2,-0.15]; b=[0,0.04,-0.26,0.28]; c=[0,-0.04,0.23,0.26]; d=[0.16,0.85,0.22,0.24]; e=[0,0,0,0];

f=[0,1.6,1.6,0.44];

p=[0.01,0.85,0.07,0.07]; % p=[0.25,0.25,0.25,0.25]; x=0; y=0; M=420; N=480;

I=ones(M,N); for i=1:100000 k=1;

rn=rand(1); total=p(1); while totaltotal=total+p(k); end

newx=a(k)*x+b(k)*y+e(k); newy=c(k)*x+d(k)*y+f(k); x=newx; y=newy; if(i>200)

21

dx=floor(x*40+100); dy=floor(450-y*40); I(dx,dy)=0; end end

imview(I);

Julia集实现程序: clc,clear M=600; N=600;

cx=0.3; %实部 cy=0.111; %虚部 cxmin=-3.5;cxmax=3.5; cymin=-3.5;cymax=3.5;

dx=(cxmax-cxmin)/M;dy=(cymax-cymin)/N; % I=ones(M,N); for i=1:N for j=1:M n=0;

a=j*dx-3.5;b=i*dy-3.5;

while n<30 & (a*a+b*b)<100

a1=a*a-b*b+cx; %三次a1=a.^3-3*a*b*b+cx; b1=2*a*b+cy; %三次b1=3*a*a*b-b.^3+cy; a=a1; b=b1; n=n+1; end if n==30

I(i,j)=0; %I(i,j)=n 依据迭代次数不同着不同颜色 end end end

% map=colormap(hsv(50)); %imview(I,map); imview(I);

Mandelbrot集生成程序: clc,clear;

cxmin=-2.5;cxmax=2.5; cymin=-2.5;cymax=2.5; M=400;N=500;

dcx=(cxmax-cxmin)/M; dcy=(cymax-cymin)/N; I=ones(M,N);

22

for i=1:N for j=1:M x=0;y=0;

cx=cxmin+j*dcx; cy=cymin+i*dcy; n=0;a=0; while n<30 & a<4

xx=x*x-y*y+cx; %三次xx=x.^3-3*x*y*y+cx; y=2*x*y+cy; %三次y=3*x*x*y-y.^3+cy; x=xx;

a=x*x+y*y; n=n+1; end

% if n==30 I(j,i)=n; % end end end

map=colormap(hsv(50)); imview(I,map);

23

主要参考文献

1 沙震,阮火军.分形和拟和.杭州[M].浙江大学出版社,2005.3.

2 孙霞,吴自勤.分形原理及其应用.合肥[M]中国科技大学出版社,2003.10.

[3]曾建军,李世航.面向科学与工程问题的语言MATLAB.合肥[M]安徽大学出版社,2003 [4]谢和平,薛秀谦.分形应用中的数学基础与方法.北京[M]科学出版社,1998

[5]闫玉宝,分形图的IFS码设计[J].江苏工业学院学报 2003.12 第15卷第4期

[6]马燕,李顺宝.基于Julia集的图案设计与生成.电脑开发与应用2005.9第18卷 第9期 [7]周福才,朱传勇.基于超越函数的广义Mandelbrot集和Julia集分形图 东北大学学报 2002.6第23卷第6期

[8]林旭云. 一种反函数迭代生成Julia集的改进算法 福建电脑 2006年第4期

[9]李小红. 基于Julia集的图案设计的生成 合肥工业大学学报2000 8 第23卷第4期 [10]用加速逃逸时间算法构造Julia集图形 计算机应用与软件 2006 5 第23卷第5期

24

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务