ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:227.04KB ,
资源ID:9145676      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9145676.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第二章典型的分形曲线与分形集new.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第二章典型的分形曲线与分形集new.docx

1、第二章典型的分形曲线与分形集new第二章典型的分形曲线与分形集 19世纪以来,一些著名的数学家在对曲线的深入研究中,创造了一系列结构、性态与传统几何曲线不同的所谓“病态”曲线,例如,Von Koch曲线,Peano曲线,还有Cantor巢、以及Sierpinski填料、地毯和海绵等。分形几何创立以后,人们发现,这些曲线正是大自然中俯拾皆是的几何对象,例如,海岸线、河川、地形边界曲线、断裂、闪电、山形轮廓等等,它们都是分形曲线,在欧几里德几何学看来,这些曲线是支离破碎的、不成形的因此才被贬为“病态的”(Pathological)曲线,但实际上,近年来在天文学、地学、生物学、物理学、化学、数学的许

2、多研究领域,都发现存在这种“病态的”结构,可见它们在自然界是普遍存在的。 在计算机图形学中,人们也是习惯于用直线。圆弧、非圆曲线,或用样条曲线来绘制各种对象的外形,其中多数是人类制造的工业产品和建筑物。但用它们描述自然界的非规则形状,则很不理想。分形曲线的引人,使计算机绘制曲线的能力得到极大的加强。本章主要介绍分形曲线及其计算机生成原理与方法,并提供这类分形曲线与分形集合的计算机算法的C语言描述。2. 1 Von Koch曲线 1804年,瑞典数学家Von Koch发现了一种曲线,这种曲线有一个奇怪的特性:它处处连续,但处处不光滑、不可微。因而在当时认为是一种与常规不同的“病态”曲线,即von

3、 Koch曲线。如果在一个正三角形上按生成规则生成,则曲线形状像一朵雪花,故又称为Koch雪花曲线。Von Koch曲线是一种典型的分形曲线,在分形理论的建立过程中,Von Koch曲线具有重要地位。Von Koch的生成方法如下:首先,从一个简单的图形出发(这个图形称为源图形),然后按照一定的生成规律不断进行变形,最后可以得到Von Koch曲线。源图形通常是一条直线或一个多边形,在曲线的生成过程中,其变形的规律是将源图形中的直线段用一段折线来代替,此折线称为生成元。图2-l(a)所示为生成元,图(b)为通过5次递归(N=5)所生成的Von Koch曲线。 Von Koch曲线的具体生成过程

4、中,由源图形和生成元就可以决定曲线的形态。源图形为一直线段,生成的曲线如图中所示,可用以绘制海岸线或云彩的边界。如果源图形为一等边三角形,生成的曲线形状与雪花类似,称为Koch雪花曲线。 由Koch曲线的生成过程知道:在极限的情形下,每小段折线的长度趋于无穷小,因而此曲线是一条无处不连续但处处不可微的曲线,其上任一点处,均无确定的切线,曲线的长度趋于无穷。图21(b)的曲线是一闭合曲线。对于koch雪花曲线,可以证明它的面积为源多边形的8/5。Koch曲线的维数,可用相似维数来定义。由生成曲线的过程可知,从任何一步到下一步,其周长增加为43,图21(a)中显而易见,整体由四个线段组成,即N4,

5、a3,其维数 D=log4log31.2618 Koch曲线是典型的分形曲线,它具有自相似性。其中生成元是由n段直线和确定的二个端点组成。自相似的不变集的曲线段,是通过反复用一生成元的相似图形,来取代每一直线段的递归调用过程而建立起来的。Koch曲线可以派生为各种形态,用不同的生成元,就可以得到不同类型的结构形态。 下面介绍如何用计算机绘制Koch曲线,算法的基本设计思想是:根据曲线的生成原理,由于它是通过不断细分递归生成的,因此,采用递归调用方法,由生成元产生Koch曲线。算法的具体步骤是: (1)给出递归深度n; (2)计算生成元递归n次后的最小线元长度dL/mn,式中L为曲线总长,m为K

6、och曲线生成元的等分数; (3)确定Koch曲线的起点; (4)执行递归子程序,对生成元的各部分进行递归,并绘出曲线。 以维数D1.2618的Koch曲线为例,曲线的生成元由三等分长度的四个部分组成,不同之处是中间那两段线段的角度,为85,如图22(a)所示。 设逆时针旋转时角度为正,生成元的初始角度为,图中已标明生成元各段的位置和角度。每一段小的线元,其坐标可由下式确定 xn=xn-1+d*cos yn=yn-1+d*sin其中,为小的线元的当前角度。 由于koch曲线的生成元由图中所示的四部分线段组成,因此,在计算机生成koch曲线算法的递归调用中,要分别对这四部分进行递归调用。下面给出

7、koch曲线的生成算法。Void Generat_Koch(n)功能:Koch曲线生成元的递归调用子程序参数说明:int n: 递归深度变量说明:int th: 小线元的当前角度,为全局变量 float x,y: 小线元的当前坐标值,为全局变量 float d: 小线元的长度d=L/mn调用函数说明:moveto(x,y): 不画线移动到(x,y) lineto(x,y): 由当前位置画直线到(x,y) if(n=0) x+=d*cos(th*3.14159/180); y+=d*sin(th*3.14159/180); lineto(x,y); return; Generat_Koch(n-

8、1); th+=85; Generat_Koch(n-1); th-=170; Generat_Koch(n-1); th+=85; koch(n-1);在上述算法中使用的递归调用,指的是函数自己调用自己的过程。采用递归调用能有效地解决那些蕴含着递归关系、且结构复杂问题,并使程序简洁易读,生成较紧凑的代码。在递归过程中,递归深度越大,则递归函数中用的变量就越多,所以,在递归调用过程中使用了堆栈来存放这些变量。上述算法中,Generat_Koch(n)是一个递归调用过程,在调用时,先判别n的值,如果n为0,则返回,否则递归调用Generat_Koch(n-1),如此不断进行,直到n等于0,然后递

9、归调用,压入堆栈中的变量从0到n依次出栈,完成本次调用。图2-2(b)所示为递归调用深度为n=5的Koch曲线。图2-2 Von Koch曲线(a)生成元;(b) N=5的Koch曲线同样,图2-3所示的Koch曲线,其生成元由9个部分组成(m=9),每部分线段的长度为r=1/3,其分维数为D=log(m)/log(r)=2.0。由于此曲线的生成元由9个部分,在递归中,分别对这9个部分进行递归调用。图2-4为另一种Koch曲线,其生成元由8部分组成,每部分线段的长度为r=1/4,其分维数D=log(m)/log(r)=1.5。在递归中共有8个递归调用,递归深度n=3。2.2 Peano-Hil

10、bert 曲线意大利数学家G. Peano在1890年首先研究过一些古代装饰图案,这些图案充满在一个平面上,曲线蜿蜒曲折一气呵成。在研究这些图案的构图规律后提出了Peano曲线。这是一种维数为2并能充满整个平面的曲线。后来,人们又发现这种曲线具有多种形态。Peano 曲线的一种特例是Peano-Hilbert曲线(如图2-5所示),她的初始图形是一单位正方形。由初始图形出发,通过下面的过程不断生成,其步骤如下:首先,将正方形四等分,求出各个小正方形的中心,并将它们连接,得到如图2-5(a)所示的折线;其次,将各个小的正方形再细分为四个相同的小正方形,并连接各小正方形的中心;按照以上的方法不断细

11、分下去,并按一定的规则一一连接,就可得到图2-5所示的Peano-Hilbert曲线。下面就Peano-Hilbert曲线的生成方法作进一步研究。其实现过程如下:(1)设置递归深度; (2)计算曲线的起点; (3)确定曲线的范围,即xmin,ymin,xmax,ymax; (4)执行Peano-Hilbert曲线的递归调用子程序。下面给出Peano-Hilbert曲线递归调用子程序的C语言描述:Viod Peano-Hilbert(n,s,x1,y1,x2,y2)功能:Peano-Hilbert曲线递归调用子程序参数说明:int n: 递归调用深度 int s: 曲线方向控制变量,取1 flo

12、at x1,y1,x2,y2: 给定的x,y变化范围变量说明:float dx: x方向网格上的间距 float dy: y方向网格上的间距调用函数说明:pow(2,n): 求2n moveto(x,y): 从当前点不画线移到(x,y) lineto(x,y): 从当前点画线移到(x,y) if (n=1)dx=x2-x1; dy=y2-y1;lineto(x1+dx/4,y1+dy/4);lineto(x1+(2-s)*dx/4,y1+(2+s)*dy/4);lineto(x1+3*dx/4,y1+3*dy/4);lineto(x1+(2+s)*dx/4,y1+(2-s)*dy/4);ret

13、urn; if (s0) Peano-Hilbert(n-1,-1,x1,y1,(x1+x2)/2,(y1+y2)/2); Peano-Hilbert(n-1,1,x1, (y1+y2)/2,(x1+x2)/2,y2); Peano-Hilbert(n-1,1, (x1+x2)/2,(y1+y2)/2,x2,y2); Peano-Hilbert(n-1,-1,x2, (y1+y2)/2,(x1+x2)/2,y1); else Peano-Hilbert(n-1,1,x1,y1,(x1+x2)/2,(y1+y2)/2); Peano-Hilbert(n-1,-1, (x1+x2)/2,y1,x2

14、,(y1+y2)/2); Peano-Hilbert(n-1,-1, (x1+x2)/2, (y1+y2)/2,x2,y2); Peano-Hilbert(n-1,-1, (x1+x2)/2,y2,x1,(y1+y2)/2); 图2-5示出了在递归调用过程中曲线方向的变化。在图(a)所示的主矩形区域xmin,ymin,xmax,ymax中,首先将该矩形区域四等分,然后对其边长2n等分,此时网格间隔为 dx=( xmax -xmin)/(2*2n) dy=( ymax -ymin)/(2*2n)Peano-Hilbert曲线的起点坐标,由下面关系给出: x= xmin +dx y= ymin +

15、dy随后,递归过程对这四个矩形区域进行递归调用。其中,每个矩形区域的范围可由已知条件算出。算法中设置了一个控制曲线的变化方向的参数S,其取值为1。当S0时,曲线变化控制变量S值的变化顺序为: -111-1当S0时,曲线变化控制变量S值的变化顺序为: 1-1-11按上面的顺序执行下去,正好与曲线的走向一致,如图2-5(a)(b)所示。这里-1表示区的S值为-1,1表示区的S值为1。随着S的变化,曲线的方向也跟着变化,同时,用lineto(x,y)不断连接各四等分的点,直到完成整个调用。 图2-6为递归深度为n=5绘出的Peano-Hilbert曲线。2.3 Cantor集George Canto

16、r(1845-1918)是德国数学家,他于1883年发表了著名的Cantor集,这是一类处处稀疏的几何对象,Cantor集和Von Koch曲线一样,都是典型的分形集合。在许多数学分支中,以及混沌动力系统、复动力系统,如Julia分形集中,Cantor集均起着非常重要的作用。2.3.1 三等分Cantor集Cantor集是一个无穷点集,而三等分Cantor集则是最基本的,而且广为人知。如图2-7所示,在单位区间0,1中,首先,将其三等分,去掉中间的一段1/3,2/3。然后再将剩下两段进行三等分,将每一段的中间部分舍弃,如此不断重复上述过程,其所达到的极限为一个点集,即三分Cantor集。图2-

17、7是一个示意图,给出了分割次数n5时每一步分割与舍弃过程中区间的变化,第n步,子区间个数为2n,长度为1/3n。2.3.2 广义Cantor集在0,1区间,将它等分为m(m3)段,保留其中s个线段,2Sm-1,而将其中的m-s个线段,如此不断继续上述过程,直到无穷,最后留下的点集,就是广义Cantor集。显然,当m=3,s=2时,就是三分Cantor集。Cantor集的维数可以用下面公式计算: D=lim log(s)/log(m)对于三等分Cantor集,其为数D=0.63092.4 Sierpinski三角形、地毯和海棉Waclaw Sierpinski(1882-1969)是波兰数学家,

18、也是一位国际上具有较高声望的、有影响的数学家。在月球上有一座环形山就是以Sierpinski 名字命名的。这里所讲的Sierpinski三角形、地毯和海棉是他于1916年提出来的。2.4.1 Sierpinski三角形将上一节的三等分Cantor集的构图方法稍加扩展,用于二维平面,如图2-8所示,取连接各边中点,将原三角形分成四个小三角形,然后挖去中间的一个小三角形,如图2-8(a)所示。下一步,将剩下的三个小三角形按上面同样的方法继续分割,并舍弃位于中间的那个三角形,如此不断重复分割与舍弃的过程,就能得到如图2-8(b)所示的结构,由一个中间有大量空隙的三角形构成。由于形成Sierpinsk

19、i三角形的过程,是一个不断分割与舍弃的过程,其总的周长,随着分割的不断进行而变得越来越大。在极限的情况下,其总的周长趋向于无穷大,而总面积则趋向于零。即,当用一维的尺度去测量时,其值为无穷大,而当用二维尺度去度量时,测得的值为零。Sierpinski三角形的维数是 D=log3/log2=1.5849Sierpinski三角形的英文名词是Gasket,有填料、垫片的意思。这个模型与统计力学的某些问题有关,因而受到理论工作者的重视。图中给出的Sierpinski三角形是用计算机绘制的,算法基本设计思想是上述的递归生成过程。具体的算法如下: (1)设置递归深度n; (2)用黑色填充一个三角形,其顶

20、点坐标是(x1,y1),(x2,y2),(x3,y3);(3)调用Sier_Gasket递归子程序。Sierpinski三角形递归算法描述如下:Viod Sier_Gasket(n,x1,y1,x2,y2,x3,y3)功能:Sierpinski三角形递归调用子程序参数说明:int n: 递归深度 float x1,y1,x2,y2,x3,y3: 三角形顶点坐标变量说明:float tri6: 数组,存储三角形的顶点坐标调用函数说明:Setfilltyle(mode,color): 设置多边形填充类型和颜色 fillpoly(nv,tri): 填充顶点数为nv的多边形 if (n=1) retu

21、rn tri0=(x1+x2)/2; tri1=(y1+y2)/2; tri2=(x2+x3)/2; tri3=(y2+y3)/2; tri4=(x1+x3)/2; tri5=(y1+y3)/2; Setfillstyle(1,WHITE); Fillpoly(3,tri); Sier_Gasket(n-1,x1,y1, (x1+x2)/2,(y1+y2)/2, (x1+x3)/2,(y1+y3)/2); Sier_Gasket(n-1, (x1+x2)/2,(y1+y2)/2, x2,y2, (x2+x3)/2,(y2+y3)/2); Sier_Gasket(n-1, (x1+x3)/2,(

22、y1+y3)/2, (x2+x3)/2,(y2+y3)/2,x3,y3);在递归过程中,值得指出的是:这里与前面有所不同,它是从大到小,也就是先挖去三角形边上三个中点构成的三角形,用白色填充,再分别挖去剩下的三个小三角形各边中点构成的三角形。按这种方式一直递归到n=1为止,递归结束。否则,还需要分别对没有挖空的三角形继续进行深度为n-1的递归调用。图2-8给出n=4的Sierpinski三角形。2.4.2 Sierpinski地毯用类似于上面的方法,可以构造Sierpinski地毯(carpet),其方法如下:设有一个正方形(如图2-9所示),将每条边三等分,正方形被分为9个面积相等的小的正方

23、形,舍弃其中中央的一个正方形,在将剩下的8个小正方形按照上面同样的方法进行分割与舍弃,如此不断重复这一过程,最终所得就是Sierpinski地毯。由生成过程可知,Sierpinski地毯也具有自相似性和标度不边性,其维数介于1和2之间,其面积的极限为0。为了计算为数,设想将此图形沿每边长扩大三倍(L=3),则可得到8倍于原图的图形(K=8),如图2-10所示。因此其维数 D=logK/logL=1.8927Sierpinski地毯递归算法描述如下:Void Sier_Carpter(x1,y1,x2,y2,n)功能:Sierpinski地毯递归调用子程序参数说明:float x1,y1,x2,

24、y2: 矩形对角的两个对角坐标 int n: 递归深度变量说明:float L: 矩形长度 float W: 矩形宽度调用函数说明:bar(x1,y1,x2,y2): 画矩形函数 if (n=1) return; L=x2-x1; W=y2-y1; Bar(x1+L/3,y1+W/3, x2-L/3,y2-W/3); Sier_Carpter(x1,y1,x1+L/3,y1+W/3,n-1); Sier_Carpter(x1+L/3,y1,x2- L/3,y1+W/3,n-1); Sier_Carpter(x2-L/3,y1,x2,y1+W/3,n-1); Sier_Carpter(x1,y1

25、+W/3,x1+ L/3,y2-W/3,n-1); Sier_Carpter(x2- L/3,y1+W/3,x2,y2-W/3,n-1); Sier_Carpter(x1,y2-W/3,x1+ L/3,y2,n-1); Sier_Carpter(x1+L/3,y2- W/3,x2- L/3,y2,n-1); Sier_Carpter(x2- L/3,y2-W/3,x2,y2,n-1);2.4.3 Sierpinski海绵将一个立方体沿其各个面等分为33=9个小立方体,舍弃位于体心的一个小立方体,以及立方体六个面的中心位置上的那一个小立方体。然后,将剩下的小立方体按相同的方法分割并舍弃位于各立方

26、体面心和体心处的更小的小立方体,如此不断继续进行,在极限的情形下,即可得到Sierpinski海绵( Sier-Sponge),其维数因介于2维与3维之间。维数计算方法与前面相似,设想将每条边扩大三倍(L=3),此时,所得到的新的形体,将比原来的扩大20倍(K=20)。因此,其维数D=log20/log3=2.7288。图2-11是计算机生成的Sierpinski海绵。为了在计算机上生成Sierpinski海绵,可采用堆积小立方体的方法构造形体,并用画家选法消除隐线。 如图2-12所示,Sierpinski海绵可以看成是由上、中、下三层组成,其上层和下层分别由八个立方体组成,见图2-12(a)

27、,每层的当中是空心的。中层由四个立方体,见图2-12(b),这四个立方体分别位于四个边角上。在计算机生成此种海绵的算法中,就象砌砖那样从底向上,一层一层地构筑成图2-12(c)那样的基本结构。在算法中采用了递归调用的方法,使这一操作不断进行下去。为了在显示时具有较好的立体效果,有必要消除隐线,可以采用画家算法,这是计算机图形学中常用的消隐方法之一,在本例的情况下,画家算法可简叙如下:先从距视点最远的小立方体开始,由远到近,逐个绘制各立方体,当远、近两处的立方体的投影重叠时,则距视点近的立方体便将远处的立方体盖住,计算机屏幕上将显示近处立方体的颜色。对上下层,则由下向上逐个处理。这个过程,就好像

28、画家绘制油画那样,用油彩绘出近处的、而将远处的重叠部分给覆盖住。下面给出图2-11所示Sierpinski海绵的递归生成算法:Void Sier- Sier-Spong(n,x,y,d)功能:Sierpinski海绵递归调用子程序参数说明:int n: 递归深度 int x,y: 小正方体所处的位置 int d: 小正方体的长宽高的大小变量说明:int dd,dx: 小正方体边长和投影的位移调用函数说明:Cubic(x,y,d): 画长宽高为d位置在(x,y)的正方体 if (n=0) Cubic(x,y,d);return; dd=d/3;dx=dd*cos(3.14159/4); Sier

29、-Spong(n-1,x+2*dx,y-2*dx,dd); Sier-Spong(n-1,x+2*dx+dd,y-2*dx,dd); Sier-Spong(n-1,x+2*dx+2*dd,y-2*dx,dd); Sier-Spong(n-1,x+dx,y-dx,dd); Sier-Spong(n-1,x+dx+2*dd,y-dx,dd); Sier-Spong(n-1,x,y,dd); Sier-Spong(n-1,x+dd,y,dd); Sier-Spong(n-1,x+2*dd,y,dd); Sier-Spong(n-1,x+2*dx,y-2*dx-dd,dd); Sier-Spong(n

30、-1,x+2*dx+2*dd,y-2*dx-dd,dd); Sier-Spong(n-1,x,y-dd,dd); Sier-Spong(n-1,x+2*dd,y-dd,dd); Sier-Spong(n-1,x+2*dx,y-2*dx-2*dd,dd); Sier-Spong(n-1,x+2*dx+dd,y-2*dx-2*dd,dd); Sier-Spong(n-1,x+2*dx+2*dd,y-2*dx-2*dd,dd); Sier-Spong(n-1,x+dx,y-dx-2*dd,dd); Sier-Spong(n-1,x+dx+2*dd,y-dx-2*dd,dd); Sier-Spong(

31、n-1,x,y-2*dd,dd); Sier-Spong(n-1,x+dd,y-2*dd,dd); Sier-Spong(n-1,x+2*dd,y-2*dd,dd);2.5 随机Koch曲线前面介绍的分形曲线,称为有规则分形曲线,它们大都是数学家构造出来的,具有确定的变化规律的曲线。从本节开始,讨论几种无规分形曲线,又称为随机分形曲线。大自然客观存在的海岸线、地形、河川、以及变化无常的布朗运动轨迹等,是其典型代表。这类曲线具有普遍性,但是,用传统的几何学方法是无法对它们有效地描述的。分形几何为这类曲线的描述提供了理论方法。这类曲线也具有自相似性,但是,这种自相似性具有同纪性质,是通过大量统计而抽象得出的。另外,它们只有在无标度区域内才有意义,否则,自相似性便不存在。所谓无标度性是指当标度改变时,该对象在形态、复杂强度、以及不规则性等方面均不发生变化的性质。例如Koch曲线,当我们用不同倍率

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1