分形算法与程序设计.ppt
《分形算法与程序设计.ppt》由会员分享,可在线阅读,更多相关《分形算法与程序设计.ppt(138页珍藏版)》请在课桌文档上搜索。
1、参考书:分形算法与程序设计,1,第 1 章,初识分形,1.1 Fractal 的含义1.2 分形的几何特征 1.3 分形的度量,1.4 分形维数1.5 分形是一种方法论 1.6 分形与计算机图形学,参考书:分形算法与程序设计,2,1.1,Fractal 的含义,英文单词Fractal,在大陆被译为“分形”,在台湾被译为“碎形”。它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的。其含义是不规则的、破碎的、分数的。曼德勃罗是想用此词来描述自然界中传统欧几里得几何学所不能描述的一大类复杂无规的几何对象。,参考书:分形算法与程序设计,3,1.2,分形的几何特征,自相似性,自
2、相似,便是局部与整体的相似。,自仿射性,自仿射性是自相似性的一种拓展。如果,将自相似性看成是局部到整体在各个方向上的等比例变换的结果的话,那么,自仿射性就是局部到整体在不同方向上的不等比例变换的结果。前者称为自相似变换,后者称为自仿射变换。,精细结构,任意小局部总是包含细致的结构。,参考书:分形算法与程序设计,4,1.3,分形的度量,(1)长度的测量 Length(n=0)=1 Length(n=1)=4/3 Length(n=2)=16/9 Length=lim(Length(n)=lim(4/3)=,n,n,n,参考书:分形算法与程序设计,5,1.3,分形的度量,(2)面积的测量 Area
3、(n0)=(13/6)/2=3/12 Area(n1)=3/12(4/9)Area(n2)=3/12(4/9)2 Area(n)=lim(3/12(4/9)n)=0,n,如上所述,koch曲线在一维欧氏空间中的度量为,在二维欧氏空间中的面积为0。如此看来,Koch曲线在传统欧氏空间中不可度量。,参考书:分形算法与程序设计,6,1.4,分形维数,分形维数是分形的很好的不变量,它一般是分数,用它可以把握住分形体的基本特征。,图a是边长为1的正方形,当边长变成原来的12时,原正方形中包含4个小正方形,如图b,而4=22;图c是边长为1的正立方体,当边长变成原来的12时,原正立方体中包含8个小正立方体
4、,如图d,而8=23。,则有NkD,D=log(N)/log(k)这样Koch曲线的分形维数D=log(4)log(3)=1.2618,参考书:分形算法与程序设计,7,1.4,分形维数,对于实际的自然景物,我们可以用计盒维数的方法测量分维。,参考书:分形算法与程序设计,8,1.5,分形是一种方法论,沃尔夫奖(Wolf Prize)在颁发给分形理论创始人曼德勃罗时的评语所说的,“分形几何改变了我们对世界的看法”。分形理论至少会在三个方面改变我们对世界的认识。首先,自然界中许多不规则的形态其背后都有规则,都可以用分形的方法建立模型并在计算机上构造出以假乱真的景象来,显然利用这套方法我们可以把世界压
5、缩到几个分形规则中,便于携带和传播。其次,许多以前被认为是随机的现象,从分形理论的角度看并不是随机的,比如布朗运动、股票价格的波动、传染病的流行传播等,这为我们控制这些貌似随机的现象奠定了理论基础。最后,分形理论中的分数维概念,为我们认识世界中的复杂形态提供了一个新的尺度。复杂性科学是现代科学的前沿,在这门科学的研究过程中,发现了许多符合分形规则的复杂形态,而分数维是测量这些形态复杂程度的一种度量。也就是说,我们找到了对复杂性做定量分析的工具。,参考书:分形算法与程序设计,9,1.6,分形与计算机图形学,分形理论的发展离不开计算机图形学的支持,如果一个分形构造的表达,不用计算机的帮助是很难让人
6、理解的。不仅如此,分形算法与现有计算机图形学的其他算法相结合,还会产生出非常美丽的图形,而且可以构造出复杂纹理和复杂形状,从而产生非常逼真的物质形态和视觉效果。分形作为一种方法,在图形学领域主要是利用迭代、递归等技术来实现某一具体的分形构造。分形几何学与计算机图形学相结合,将会产生一门新的学科分形图形学。它的主要任务是以分形几何学为数学基础,构造非规则的几何图素,从而实现分形体的可视化,以及对自然景物的逼真模拟。,参考书:分形算法与程序设计,10,第 2 章,分形图的递归算法,2.1 Cantor三分集的递归算法2.2 Koch曲线的递归算法 2.3 Sierpinski垫片的递归算法,2.4
7、 Hilbert-Peano曲线的算法2.5 分支结构分形递归算法2.6 分形树递归算法,参考书:分形算法与程序设计,11,递归算法,u 直接递归调用的例子如下:void Recur(n)Recur(m);过程Recur的内部又调用了自身Recur过程。,参考书:分形算法与程序设计,12,递归算法,u 间接递归调用的例子如下:void Recur_A(n)Recur_B(m);void Recur_B(n)Recur_A(m);,参考书:分形算法与程序设计,13,2.1,Cantor三分集的递归算法,参考书:分形算法与程序设计,14,2.2,Koch曲线的递归算法,参考书:分形算法与程序设计,
8、15,2.2,Koch曲线的递归算法,参考书:分形算法与程序设计,16,2.2,Koch曲线的递归算法,参考书:分形算法与程序设计,17,2.3,Sierpinski垫片的递归算法,参考书:分形算法与程序设计,18,2.3,Sierpinski垫片的递归算法,参考书:分形算法与程序设计,19,2.4,Hilbert-Peano曲线的算法,参考书:分形算法与程序设计,20,2.4,Hilbert-Peano曲线的算法,参考书:分形算法与程序设计,21,2.5,分支结构分形递归算法,参考书:分形算法与程序设计,22,2.5,分支结构分形递归算法,参考书:分形算法与程序设计,23,2.6,分形树递归
9、算法,参考书:分形算法与程序设计,24,2.6,分形树递归算法,参考书:分形算法与程序设计,25,第 3 章,文法构图算法,3.1 LS文法3.2 单一规则的LS文法生成,3.3 多规则的LS文法生成3.4 随机LS文法,参考书:分形算法与程序设计,26,文法构图算法,字母表:L,R生成规则:LR,RL R初始字母:R则有:RL RR L RL R R L RR L R L R R L RL R R L R R L R L R R L R,参考书:分形算法与程序设计,27,3.1,LS文法,二维LS是字母表的绘图规则如下:F:以当前方向前进一步,并画线;f:以当前方向前进一步,不画线;:逆时针
10、旋转角;:顺时针旋转角;:将海龟当前信息压栈;:将“”时刻的海龟信息出栈。,参考书:分形算法与程序设计,28,3.2,单一规则的LS文法生成,Koch曲线的LS文法如下:w:F a:60o P:F F F F F,步骤0:F 步骤1:F F F F 步骤2:F F F F F F F F F F F F F F F F 步骤3:F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F 步骤4:,参考
11、书:分形算法与程序设计,29,3.3,单一规则的LS算法实现,参考书:分形算法与程序设计,30,3.3,单一规则的LS算法实现,参考书:分形算法与程序设计,31,3.3,单一规则的LS算法实现,参考书:分形算法与程序设计,32,3.3,多规则的LS文法生成,为了生成更复杂的图形,可将字母表增加字母元素,Sierpinski垫片的LS文法如下:w:L a:600 P1:L R L R P2:R L R L 相应的改造1:,参考书:分形算法与程序设计,33,3.3,多规则的LS文法生成,相应的改造2:,参考书:分形算法与程序设计,34,3.3,多规则的LS文法生成,相应的改造3:,参考书:分形算法
12、与程序设计,35,3.4,随机LS文法,w:Fa:25P1:FFFFFFP2:FFFFFFP3:FFFFFFFFF,为了更好的模拟自然景物,需要随机使用多个变换规则。,p1,p2,p3,相应的改造1:,相应的改造2:,参考书:分形算法与程序设计,36,3.4,随机LS文法,参考书:分形算法与程序设计,37,第 4 章,迭代函数系统算法,4.1 混沌游戏4.2 迭代函数系统4.3 相似变换与仿射变换4.4 IFS码,4.5 Sierpinski垫片的IFS生成4.6 拼贴与IFS码的确定 4.7 IFS植物形态实例4.8 复平面上的IFS算法,参考书:分形算法与程序设计,38,混沌游戏,4.1,
13、给定平面上三点A,B,C。再任意给定初始点Z0,做下列迭代。,当掷出的硬币呈正面,当掷出的硬币呈反面,当掷出的硬币呈侧面,参考书:分形算法与程序设计,39,迭代函数系统,4.2,迭代函数系统(Iterated Function System,IFS)是分形理论的重要分支。它将待生成的图像看成是由许多与整体相似的(自相似)或经过一定变换与整体相似的(自仿射)小块拼贴而成。,参考书:分形算法与程序设计,40,相似变换与仿射变换,直观上看:相似变换是指在各个方向上变换的比率必须相同的一种比例变换,仿射变换是指在不同的方向上变化的比率可以不同的一种比例变换。,4.3,相似变换:如果对于任意两点A、B,
14、以及对应点A、B,总有AB=kAB(k为正实数),那么,这个变换叫做相似变换,实数k叫做相似比。仿射变换:x=ax+by+e y=cx+dy+f其中a,b,c,d,e,f为仿射变换系数。,参考书:分形算法与程序设计,41,4.4,IFS码,用多个仿射变换式表达一个图象w1,w2,w3,,使用每一个仿射变换式的概率p可以不同,一般面积越大,p值越大。于是,只要获得a,b,c,d,e,f,p(IFS码)的值便可以得到要表达的图形。,参考书:分形算法与程序设计,42,4.5,Sierpinski垫片的IFS生成,由于生成的三个小三角形的面积相等,所以我们可以让w1、w2、w3出现的概率相同或相近。,
15、x=0.5x y=0.5y,x=0.5x+0.5 y=0.5y,x=0.5x+0.25 y=0.5y-0.5,x=0.5x+0y+0 y=0 x+0.5y+0 x=0.5x+0y+0.5 y=0 x+0.5y+0 x=0.5x+0y+0.25 y=0 x+0.5y-0.5,w1,w2,w3,参考书:分形算法与程序设计,43,4.5,Sierpinski垫片的IFS生成,参考书:分形算法与程序设计,44,4.5,Sierpinski垫片的IFS生成,(源代码:书中程序4.1),参考书:分形算法与程序设计,45,4.6,拼贴与IFS码的确定,此时四个子图分别是目标图的1/4、1/5、1/4、1/2
16、大小的复制品。然后按顺序交互式地在屏幕上调节每一个子图的仿射变换参数ai、bi、ci、di、ei,使得平移、旋转后基本覆盖住目标图。,参考书:分形算法与程序设计,46,4.7,IFS植物形态实例,IFS码在书中表4.18,IFS码在书中表4.20,IFS码在书中表4.19,参考书:分形算法与程序设计,47,4.8,复平面上的IFS算法,参考书:分形算法与程序设计,48,4.8,复平面上的IFS算法,参考书:分形算法与程序设计,49,4.8,复平面上的IFS算法,参考书:分形算法与程序设计,50,第 5 章,逃逸时间算法,5.1 基本思想5.2 Julia集的逃逸时间算法,5.3 Mandelb
17、rot集的逃逸时间算法5.4 基于牛顿迭代的Julia集的逃逸时间算法,参考书:分形算法与程序设计,51,逃逸时间算法的基本思想,F(z)=z2+c当c=0时,由于z是复数,即z=x+yi,则有z2=zz=(x+yi)(x+yi)=x2+y2i2+2xyi=(x2-y2)+(2xy)i设复数z=x+yi的绝对值,即|z|=SQR(x2+y2)|F(z0)|=|x02-y02+2x0y0i|=SQR(x02-y02)2+(2x0y0)2)=SQR(x04+y04-2x02y02+4x02y02)=SQR(x02+y02)2)=|z0|2若01,经过迭代z会趋向无穷,z向无穷逃逸。若|z0|1,z
18、是平面上的单位圆。,5.1,参考书:分形算法与程序设计,52,逃逸时间算法的基本思想,当c0时,其吸引子不再是0,而是一个区域,称混沌区。如图,假设有一个充分大的整数N,当未逃逸区域M中的初始点a经过小于N次迭代就达到未逃逸区域M的边界,甚至超出了边界,我们就认为点a逃逸出去了;而如果经过N次迭代后a的轨迹仍未到达M的边界,我们就认为,a是A上的点。用这样的方法,描绘出A的边界图形,这便是逃逸时间算法的基本思想。,5.1,参考书:分形算法与程序设计,53,5.2,Julia集的逃逸时间算法,参考书:分形算法与程序设计,54,5.2,Julia集的逃逸时间算法,参考书:分形算法与程序设计,55,
19、5.2,Julia集的逃逸时间算法,参考书:分形算法与程序设计,56,参考书:分形算法与程序设计,57,5.3,Mandelbrot集的逃逸时间算法,参考书:分形算法与程序设计,58,5.3,Mandelbrot集的逃逸时间算法,参考书:分形算法与程序设计,59,参考书:分形算法与程序设计,60,5.4,基于牛顿迭代的Julia集的逃逸时间算法,牛顿迭代法求根公式:zn+1=zn-f(zn)/f(zn)其中,f(zn)是f(zn)的导数。考虑f(z)=z3-1=0的情况,那么相应的牛顿变换是f(z)=(2z3+1)/3z2则z的三个根分别是w1=1,w2=ei2/3,w3=ei4/3,三个根的
20、吸引域A(w1),A(w2),A(w3)的交界便是牛顿函数的Julia集。经过迭代,在A(wi)上的点都会被吸引到点wi上。设一个较大的迭代次数N,以及一个距离小量r,当迭代次数达到N,其与根点的距离小于r的被认为是收敛到某根上了,否则被认为是逃逸了。,参考书:分形算法与程序设计,61,5.4,基于牛顿迭代的Julia集的逃逸时间算法,参考书:分形算法与程序设计,62,5.4,基于牛顿迭代的Julia集的逃逸时间算法,参考书:分形算法与程序设计,63,第 6 章,分形显微镜,6.1 逃逸时间算法的放缩原理6.2 Mandelbrot集的局部放大6.3 Julia集的局部放大,6.4 牛顿迭代法
21、的局部放大6.5 作为Julia集字典的Mandelbrot集,参考书:分形算法与程序设计,64,逃逸时间算法的放缩原理,6.1,参考书:分形算法与程序设计,65,6.2,Mandelbrot集的局部放大,参考书:分形算法与程序设计,66,6.2,Mandelbrot集的局部放大,参考书:分形算法与程序设计,67,6.3,Julia集的局部放大,参考书:分形算法与程序设计,68,6.3,Julia集的局部放大,参考书:分形算法与程序设计,69,6.4,牛顿迭代法的局部放大,参考书:分形算法与程序设计,70,6.4,牛顿迭代法的局部放大,参考书:分形算法与程序设计,71,6.5,作为Julia集
22、字典的Mandelbrot集,Julia集是一个固定的值的图形展现,而Mandelbrot集却要走遍所有的值,显然,每一个值都对应一个Julia集,所以我们说Mandelbrot集是Julia集微缩字典。,我们可以在Mandelbrot集的绘图空间中任意取一点,并将其还原成相应的值,再将此值作为Julia集程序中选定的值,来绘制Julia集的图形。,参考书:分形算法与程序设计,72,第 7 章,分形演化算法,7.1 从逻辑运算谈起 7.2 一维元胞自动机 7.3 二维元胞自动机,7.4 分形演化的DLA模型 7.5 用DLA模型模拟植物的生长7.6 不同初始条件的DLA形态,参考书:分形算法与
23、程序设计,73,参考书:分形算法与程序设计,74,从逻辑运算谈起,7.1,逻辑异或 本 行:0 0 0 1 1 0 1 1下一行:0 1 1 0,参考书:分形算法与程序设计,75,7.2,一维元胞自动机,元胞按等间隔方式分布在一条向两侧无限延伸的直线中,称为一维元胞自动机。,本 行:001 100 其他下一行:1 1 0,参考书:分形算法与程序设计,76,7.2,一维元胞自动机,参考书:分形算法与程序设计,77,7.3,二维元胞自动机,在一个二维网格中,如果抛下一粒种子(元胞着色),然后考察一下种子身边的格子中的元胞状态会发生什么事情。给一个规则,即每一个格子的状态,由其周围的八个格子的状态(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 程序设计
链接地址:https://www.desk33.com/p-246524.html