第二章典型的分形曲线与分形集newWord文档下载推荐.docx
- 文档编号:22281779
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:25
- 大小:227.04KB
第二章典型的分形曲线与分形集newWord文档下载推荐.docx
《第二章典型的分形曲线与分形集newWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第二章典型的分形曲线与分形集newWord文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
自相似的不变集的曲线段,是通过反复用一生成元的相似图形,来取代每一直线段的递归调用过程而建立起来的。
Koch曲线可以派生为各种形态,用不同的生成元,就可以得到不同类型的结构形态。
下面介绍如何用计算机绘制Koch曲线,算法的基本设计思想是:
根据曲线的生成原理,由于它是通过不断细分递归生成的,因此,采用递归调用方法,由生成元产生Koch曲线。
算法的具体步骤是:
(1)给出递归深度n;
(2)计算生成元递归n次后的最小线元长度d=L/mn,式中L为曲线总长,m为Koch曲线生成元的等分数;
(3)确定Koch曲线的起点;
(4)执行递归子程序,对生成元的各部分进行递归,并绘出曲线。
以维数D=1.2618的Koch曲线为例,曲线的生成元由三等分长度的四个部分组成,不同之处是中间那两段线段的角度,为85°
,如图2-2(a)所示。
设逆时针旋转时角度为正,生成元的初始角度为θ,图中已标明生成元各段的位置和角度。
每一段小的线元,其坐标可由下式确定
xn=xn-1+d*cosθ
yn=yn-1+d*sinθ
其中,θ为小的线元的当前角度。
由于koch曲线的生成元由图中所示的四部分线段组成,因此,在计算机生成koch曲线算法的递归调用中,要分别对这四部分进行递归调用。
下面给出koch曲线的生成算法。
VoidGenerat_Koch(n)
功能:
Koch曲线生成元的递归调用子程序
参数说明:
intn:
递归深度
变量说明:
intth:
小线元的当前角度,为全局变量
floatx,y:
小线元的当前坐标值,为全局变量
floatd:
小线元的长度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-1);
th+=85;
th-=170;
koch(n-1);
在上述算法中使用的递归调用,指的是函数自己调用自己的过程。
采用递归调用能有效地解决那些蕴含着递归关系、且结构复杂问题,并使程序简洁易读,生成较紧凑的代码。
在递归过程中,递归深度越大,则递归函数中用的变量就越多,所以,在递归调用过程中使用了堆栈来存放这些变量。
上述算法中,Generat_Koch(n)是一个递归调用过程,在调用时,先判别n的值,如果n为0,则返回,否则递归调用Generat_Koch(n-1),如此不断进行,直到n等于0,然后递归调用,压入堆栈中的变量从0到n依次出栈,完成本次调用。
图2-2(b)所示为递归调用深度为n=5的Koch曲线。
图2-2VonKoch曲线
(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.2Peano-Hilbert曲线
意大利数学家G.Peano在1890年首先研究过一些古代装饰图案,这些图案充满在一个平面上,曲线蜿蜒曲折一气呵成。
在研究这些图案的构图规律后提出了Peano曲线。
这是一种维数为2并能充满整个平面的曲线。
后来,人们又发现这种曲线具有多种形态。
Peano曲线的一种特例是Peano-Hilbert曲线(如图2-5所示),她的初始图形是一单位正方形。
由初始图形出发,通过下面的过程不断生成,其步骤如下:
首先,将正方形四等分,求出各个小正方形的中心,并将它们连接,得到如图2-5(a)所示的折线;
其次,将各个小的正方形再细分为四个相同的小正方形,并连接各小正方形的中心;
……
按照以上的方法不断细分下去,并按一定的规则一一连接,就可得到图2-5所示的Peano-Hilbert曲线。
下面就Peano-Hilbert曲线的生成方法作进一步研究。
其实现过程如下:
(1)设置递归深度;
(2)计算曲线的起点;
(3)确定曲线的范围,即xmin,ymin,xmax,ymax;
(4)执行Peano-Hilbert曲线的递归调用子程序。
下面给出Peano-Hilbert曲线递归调用子程序的C语言描述:
ViodPeano-Hilbert(n,s,x1,y1,x2,y2)
Peano-Hilbert曲线递归调用子程序
递归调用深度
ints:
曲线方向控制变量,取±
1
floatx1,y1,x2,y2:
给定的x,y变化范围
floatdx:
x方向网格上的间距
floatdy:
y方向网格上的间距
pow(2,n):
求2n
moveto(x,y):
从当前点不画线移到(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);
return;
}
if(s>
0){
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,(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+dy
随后,递归过程对这四个矩形区域进行递归调用。
其中,每个矩形区域的范围可由已知条件算出。
算法中设置了一个控制曲线的变化方向的参数S,其取值为±
1。
当S>
0时,曲线变化控制变量S值的变化顺序为:
-1①→1②→1③→-1④
当S<
1①→-1④→-1③→1②
按上面的顺序执行下去,正好与曲线的走向一致,如图2-5(a)(b)所示。
这里-1①表示①区的S值为-1,1②表示②区的S值为1。
随着S的变化,曲线的方向也跟着变化,同时,用lineto(x,y)不断连接各四等分的点,直到完成整个调用。
图2-6为递归深度为n=5绘出的Peano-Hilbert曲线。
2.3Cantor集
GeorgeCantor(1845-1918)是德国数学家,他于1883年发表了著名的Cantor集,这是一类处处稀疏的几何对象,Cantor集和VonKoch曲线一样,都是典型的分形集合。
在许多数学分支中,以及混沌动力系统、复动力系统,如Julia分形集中,Cantor集均起着非常重要的作用。
2.3.1三等分Cantor集
Cantor集是一个无穷点集,而三等分Cantor集则是最基本的,而且广为人知。
如图2-7所示,在单位区间[0,1]中,首先,将其三等分,去掉中间的一段[1/3,2/3]。
然后再将剩下两段进行三等分,将每一段的中间部分舍弃,……如此不断重复上述过程,其所达到的极限为一个点集,即三分Cantor集。
图2-7是一个示意图,给出了分割次数n≤5时每一步分割与舍弃过程中区间的变化,第n步,子区间个数为2n,长度为1/3n。
2.3.2广义Cantor集
在[0,1]区间,将它等分为m(m≥3)段,保留其中s个线段,2≤S≤m-1,而将其中的m-s个线段,……如此不断继续上述过程,直到无穷,最后留下的点集,就是广义Cantor集。
显然,当m=3,s=2时,就是三分Cantor集。
Cantor集的维数可以用下面公式计算:
D=limlog(s)/log(m)
对于三等分Cantor集,其为数D=0.6309…
2.4Sierpinski三角形、地毯和海棉
WaclawSierpinski(1882-1969)是波兰数学家,也是一位国际上具有较高声望的、有影响的数学家。
在月球上有一座环形山就是以Sierpinski名字命名的。
这里所讲的Sierpinski三角形、地毯和海棉是他于1916年提出来的。
2.4.1Sierpinski三角形
将上一节的三等分Cantor集的构图方法稍加扩展,用于二维平面,如图2-8所示,取
连接各边中点,将原三角形分成四个小三角形,然后挖去中间的一个小三角形,如图2-8(a)所示。
下一步,将剩下的三个小三角形按上面同样的方法继续分割,并舍弃位于中间的那个三角形……,如此不断重复分割与舍弃的过程,就能得到如图2-8(b)所示的结构,由一个中间有大量空隙的三角形构成。
由于形成Sierpinski三角形的过程,是一个不断分割与舍弃的过程,其总的周长,随着分割的不断进行而变得越来越大。
在极限的情况下,其总的周长趋向于无穷大,而总面积则趋向于零。
即,当用一维的尺度去测量时,其值为无穷大,而当用二维尺度去度量时,测得的值为零。
Sierpinski三角形的维数是
D=log3/log2=1.5849……
Sierpinski三角形的英文名词是Gasket,有填料、垫片的意思。
这个模型与统计力学的某些问题有关,因而受到理论工作者的重视。
图中给出的Sierpinski三角形是用计算机绘制的,算法基本设计思想是上述的递归生成过程。
具体的算法如下:
(1)设置递归深度n;
(2)用黑色填充一个三角形,其顶点坐标是(x1,y1),(x2,y2),(x3,y3);
(3)调用Sier_Gasket递归子程序。
Sierpinski三角形递归算法描述如下:
ViodSier_Gasket(n,x1,y1,x2,y2,x3,y3)
Sierpinski三角形递归调用子程序
floatx1,y1,x2,y2,x3,y3:
三角形顶点坐标
floattri[6]:
数组,存储三角形的顶点坐标
Setfilltyle(mode,color):
设置多边形填充类型和颜色
fillpoly(nv,tri):
填充顶点数为nv的多边形
if(n==1)return
tri[0]=(x1+x2)/2;
tri[1]=(y1+y2)/2;
tri[2]=(x2+x3)/2;
tri[3]=(y2+y3)/2;
tri[4]=(x1+x3)/2;
tri[5]=(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,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,x3,y3);
在递归过程中,值得指出的是:
这里与前面有所不同,它是从大到小,也就是先挖去三角形边上三个中点构成的三角形,用白色填充,再分别挖去剩下的三个小三角形各边中点构成的三角形。
按这种方式一直递归到n=1为止,递归结束。
否则,还需要分别对没有挖空的三角形继续进行深度为n-1的递归调用。
图2-8给出n=4的Sierpinski三角形。
2.4.2Sierpinski地毯
用类似于上面的方法,可以构造Sierpinski地毯(carpet),其方法如下:
设有一个正方形(如图2-9所示),将每条边三等分,正方形被分为9个面积相等的小的正方形,舍弃其中中央的一个正方形,在将剩下的8个小正方形按照上面同样的方法进行分割与舍弃,如此不断重复这一过程,最终所得就是Sierpinski地毯。
由生成过程可知,Sierpinski地毯也具有自相似性和标度不边性,其维数介于1和2之间,其面积的极限为0。
为了计算为数,设想将此图形沿每边长扩大三倍(L=3),则可得到8倍于原图的图形(K=8),如图2-10所示。
因此其维数
D=logK/logL=1.8927……
Sierpinski地毯递归算法描述如下:
VoidSier_Carpter(x1,y1,x2,y2,n)
Sierpinski地毯递归调用子程序
floatx1,y1,x2,y2:
矩形对角的两个对角坐标
intn:
floatL:
矩形长度
floatW:
矩形宽度
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+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.3Sierpinski海绵
将一个立方体沿其各个面等分为33=9个小立方体,舍弃位于体心的一个小立方体,以及立方体六个面的中心位置上的那一个小立方体。
然后,将剩下的小立方体按相同的方法分割并舍弃位于各立方体面心和体心处的更小的小立方体……,如此不断继续进行,在极限的情形下,即可得到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),每层的当中是空心的。
中层由四个立方体,见图2-12(b),这四个立方体分别位于四个边角上。
在计算机生成此种海绵的算法中,就象砌砖那样从底向上,一层一层地构筑成图2-12(c)那样的基本结构。
在算法中采用了递归调用的方法,使这一操作不断进行下去。
为了在显示时具有较好的立体效果,有必要消除隐线,可以采用画家算法,这是计算机图形学中常用的消隐方法之一,在本例的情况下,画家算法可简叙如下:
先从距视点最远的小立方体开始,由远到近,逐个绘制各立方体,当远、近两处的立方体的投影重叠时,则距视点近的立方体便将远处的立方体盖住,计算机屏幕上将显示近处立方体的颜色。
对上下层,则由下向上逐个处理。
这个过程,就好像画家绘制油画那样,用油彩绘出近处的、而将远处的重叠部分给覆盖住。
下面给出图2-11所示Sierpinski海绵的递归生成算法:
VoidSier-Sier-Spong(n,x,y,d)
Sierpinski海绵递归调用子程序
intx,y:
小正方体所处的位置
intd:
小正方体的长宽高的大小
intdd,dx:
小正方体边长和投影的位移
Cubic(x,y,d):
画长宽高为d位置在(x,y)的正方体
if(n==0){Cubic(x,y,d);
dd=d/3;
dx=dd*cos(3.14159/4);
Sier-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-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(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曲线,当我们用不同倍率
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 典型 曲线 分形集 new
![提示](https://static.bdocx.com/images/bang_tan.gif)