1、孔令德,,第八章,分形几何,分形与分维的概念 递归模型与生成元 L系统模型与文法构图法 IFS迭代函数系统模型与吸引子,本章学习目标,8.1 分形和分维 8.2 递归模型 8.3 L系统模型 8.4 IFS迭代函数系统模 8.5 本章小结,本章内容,8.1分形与分维,真实的世界却并不规则,闪电不是直线,海岸线不是弧线,云团不是球体,山峦也不是锥体。自然界的许多对象是如此不规则和支离破碎,以致欧氏几何学不能真实有效地再现大自然。 为了再现真实世界,必须选择新的工具,分形几何学应运而生。分形几何是以非规则物体为研究对象的几何学。由于闪电、海岸线、云团、山峦、海浪、野草、森林、火光等非规则物体在自然
2、界里比比皆是,因此分形几何学又被称为描述大自然的几何学。,夜空的闪电 分形山,8.1.1 分形的诞生,分形(fractal)这个词,是由被称为“分形之父”的美籍法国数学家Mandelbrot自己创造出来的,此词来源于拉丁文fractus,意为不规则、支离破碎。1967年Mandelbrot在美国科学杂志上发表了划时代的论文英国海岸线有多长?统计自相似与分数维,成为其分形思想萌芽的重要标志。1973年,在法兰西学院讲学期间,Mandelbrot提出了分形几何学的整体思想,并认为分数维是个可用于研究许多物理现象的有力工具。1982年Mandelbrot出版了大自然的分形几何学,引起了学术界的广泛重
3、视,Mandelbrot也因此一举成名。,Mandelbrot(Benoit Mandelbrot,19242010),曼德尔布罗特(Benoit B. Mandelbrot),数学家、经济学家,分形理论创始人。1924年生于波兰华沙;1936年随全家移居法国巴黎,在那里经历了动荡的二战时期;1948年在帕萨迪纳获得航空硕士学位;1952年在巴黎大学获得数学博士学位;曾经是普林斯顿、日内瓦、巴黎的访问教授,哈佛大学的“数学实践讲座”教授,IBM公司研究成员和会员。,(a) 海岸线轮廓 (b)海岸线近景英国的海岸线,自相似性是指局部与整体相似的性质。在自然界中,具有自相似性的物体比比皆是,起伏的
4、山峦中一座座山峰和整体山脉,弯曲的河流中一个个支流和整体河川,茂密的树木上的一条条树杈和整体树木等,均具有自相似性。,8.1.2 分形的基本特征,1.自相似性,(a)蕨类植物叶子的自相似性 (b)细叶与叶子的相似性蕨类植物的自相似性,标度是计量单位的刻度。比如长度的标度是米;重量的标度是公斤;面积的标度是平方米等。对欧氏几何学内的不同形体,可以选择不同的标度去度量。由于分形具有无穷嵌套的精细结构,自相似性使得其内部结构不存在特征长度,当变换尺子的标度时,看到的是相同或相似的图形。分形是没有确定的标度的,也就是说不能用标度去度量,称为无标度性。换句话说,人们已经不能通过长度、重量、面积等标度去描
5、述分形。,2.无标度性,一般认为,满足下列条件的图形称为分形集 分形集具有任意尺度下的比例细节,或者说具有精细结构。 分形集是不规则的,以至于不能用传统的几何语言来描述。 分形集通常具有某种自相似性,或许是近似的或许是统计意义下的自相似。 分形集在某种方式下定义的“分维数”一般大于它的拓扑维数。 分形集的定义常常是非常简单的,或许是递归的。,8.1.3 分形的定义,维数是几何对象的一个重要特征量,它是欧氏几何对学描述点的位置所需的独立坐标数目。为了定量地刻画分形,引入了分数维数的概念。分数维数与欧氏几何学中的整数维数相对应。 分形理论认为,维数中可以包含有小数。把分形维数记为D,简称为分维。
6、分维的计算公式为:,8.1.4 分形维数的定义,(8-1),N为与整体自相似的局部形体个数。S为相似比,等于整体和局部之比。从式(8-1)可以看出,分维的计算结果是两个参数的对数值之比,所以分维值不一定是整数。,N=2,S=2,即2=21.D=1.0,N=4,S=2,即2=22.分维D=2.0,N=8,S=2,即2=23.分维D=3.0,对于典型的分形曲线,例如Koch曲线,构成方法如下:取一段直线,将其三等分,保留两端的两段,将中间一段拉起构造等边三角形的两条边。N=4,S=3,分维D=ln4/ln3=1.26186。可以看出Koch曲线点点连续,但点点不可导,属于病态曲线;Koch曲线局部
7、与整体相似,具有自相似性。因此可以使用Koch曲线来模拟海岸线。根据Mandelbrot的计算,英国海岸线的分维为D=1.25。,分形的分维,8.2 递归模型,分形图形的传统实现模型是递归模型。例如n!可以采用递归模型实现。即5!54!,而4!43!,1!1,递归公式表示如下:,(8-2),long fac(int n)/阶乘函数factorial long f;if (n=0 | n=1) f=1;/0!和1!的值为1else f= n*fac(n-1);/n1时,进行阶乘递归调用return f;/将阶乘计算值返回给主函数 ,8.2.1 Cantor集,“病态”原因:数目无穷多,但总长度趋
8、近于零。,分形维数:Dln2/ln30.6309。,集合论的创始人德国数学家Cantor(Georg Cantor,18451918)在1883年曾构造了一种三等分Cantor集.,Cantor生成元,生成元:假定初始直线段P0P1为水平直线,直线段三等分后,被抛弃的直线段为T0T1。Cantor集的递归调用是反复使用生成元来取代每一段直线。即使用T0替换P1后以P0与T0为端点调用Cantor()函数绘制第一段;使用T1替换P0后,以T1与P1为端点调用Cantor()函数绘制第二段。,,,(8-3),生成元各点之间的几何关系为,void CTestView:Cantor(CP2 P0,CP
9、2 P1,int n)/Cantor函数 if(0=n)pDC-MoveTo(Round(P0.x),Round(P0.y);pDC-LineTo(Round(P1.x),Round(P1.y);return;CP2 T0,T1;T0.x=P0.x+(P1.x-P0.x)/3.0;T1.y=P0.y ; Cantor(P0,T0,n-1);T1.x=P0.x+2*(P1.x-P0.x)/3.0;T0.y=P0.y ;Cantor(T1,P1,n-1); ,Cantor演示,8.2.2 Koch 曲线,瑞典数学家Koch(Helge von Koch,18701924)在1904年发表的一篇题为
10、“从初等几何构造的一条没有切线的连续曲线”的论文中提出著名的Koch曲线。,“病态”原因:处处连续,处处不可导。 分形维数:D=ln4/ln31.26186。,生成元: Koch生成元的起点和终点坐标分别为P0和P1。生成元由4段直线构成,第一段直线段和第二段直线段之间的夹角可以为任意角度,不同的角度值生成的Koch曲线有很大差异。最常用的角度是60。,(a)=60 (b)=85 递归深度n5 的Koch曲线,已知初始直线段的起点坐标P0和终点坐标P1,可以计算出长度L0 。,设递归n次后的最小线元长度为d,则,(8-4),Koch 雪花,void CTestView:Koch(int n)/
11、Koch函数 if(0=n)P1.x=P0.x+d*cos(Alpha);P1.y=P0.y+d*sin(Alpha);pDC-MoveTo(ROUND(P0.x),ROUND(P0.y);pDC-LineTo(ROUND(P1.x),ROUND(P1.y);P0=P1;return;Koch(n-1);Alpha+=Theta;Koch(n-1);Alpha-=2*Theta;Koch(n-1);Alpha+=Theta;Koch(n-1); ,8.2.3 Peano-Hilbert曲线,接着德国数学家Hilbert (David Hilbert,18621943)于1891年也构造出一种类
12、型相同但比较简单的曲线。这种曲线被称为Peano-Hilbert曲线。,意大利数学家Peano(Giuseppe Peano,18581932),通过对一些古代装饰图案的研究,于1890年构造出一种奇怪的平面曲线,这条曲线蜿蜒向前一笔绘成,并能充满整个平面。,Peano-Hilbert曲线的出现,曾令数学界大吃一惊: (1)它是一条曲线,但又是一个平面; (2)Peano-Hilbert曲线的方程只有一个参数,但它却能确定了一个平面;而在欧几里德几何学中,确定一条曲线需要一个参数,确定一个平面需要两个参数。,“病态”原因:一维曲线却能充满二维平面。 分形维数:D=ln4/ln2=2.0。,生成
13、元:P0(x0,y0)和P1(x1,y1)是正方形的左下角点和右上角点坐标。正方形的宽和高分别为w和h,设Peano-Hilbert曲线的4个坐标分别为P2(x2,y2),P3(x3,y3),P4(x4,y4)和P5(x5,y5)。则,图8-16 Peano-Hilbert生成元,先考虑s0,即开口向下的情况:,,,,,,,再考虑s0,即开口向左的情况:,,,,,对s0,取s1;对s0,取s1,则4个点可以统一表示为,(8-5),由于要形成连续曲线,所以开口向下的生成元与开口向左的生成元要互相连接。粗看起来,图中好像包含有开口向上、开口向左、开口向下和开口向右的生成元。但从连接点位置看,仅有开
14、口向下和开口向左的两类生成元。对于s0的图形,和都为开口向左的图形,仅是起点位置不同,同理对于s0的图形和都为开口向下的图形。,(a)s0 (b)s0 图8-17 Peano-Hilbert生成元的连接方式,当s0时,连接方式为:左、下、下、左,对应的s值变化为:1、1、1、1。 当s0时,连接方式为:下、左、左、下,对应的s值变化为:1、1、1、1。,图8-17中4个小正方形的左下角点和右上角点如下。,(8-6),void CTestView:Peano_Hilbert(int n,int s,CP2 p0,CP2 p1) double w,h; if(0=n)CP2 p2,p3,p4,p5
15、;w=p1.x-p0.x;h=p1.y-p0.y;p2=CP2(p0.x+w/4,p0.y+h/4);p3=CP2(p0.x+(2-s)*w/4,p0.y+(2+s)*h/4);p4=CP2(p0.x+3*w/4,p0.y+3*h/4);p5=CP2(p0.x+(2+s)*w/4,p0.y+(2-s)*h/4);pDC-MoveTo(Round(P0.x),Round(P0.y);pDC-LineTo(Round(p2.x),Round(p2.y);pDC-LineTo(Round(p3.x),Round(p3.y);pDC-LineTo(Round(p4.x),Round(p4.y);pDC
16、-LineTo(Round(p5.x),Round(p5.y);P0=p5;return;,CP2 p2,p3,p4,p5,p6;p2=CP2(p0.x+p1.x)/2,p0.y);p3=CP2(p1.x,(p0.y+p1.y)/2);p4=CP2(p0.x+p1.x)/2,p1.y);p5=CP2(p0.x,(p0.y+p1.y)/2);p6=(p0+p1)/2;if(s0)Peano_Hilbert(n-1,-1,p0,p6);/左Peano_Hilbert(n-1,1,p5,p4);/下Peano_Hilbert(n-1,1,p6,p1);/下Peano_Hilbert(n-1,-1,p
17、3,p2);/左elsePeano_Hilbert(n-1,1,p0,p6);/下Peano_Hilbert(n-1,-1,p2,p3);/左Peano_Hilbert(n-1,-1,p6,p1);/左Peano_Hilbert(n-1,1,p4,p5);/下 ,(a) (b),递归深度n4的Peano-Hilbert曲线,在19151916年间,波兰数学家Sierpinski (Waclaw Sierpinski ,18821969)将三分Cantor集的构造思想推广到二维平面,构造出千疮百孔的垫片与地毯。,8.2.4 Sierpinski垫片和地毯,1. Sierpinski垫片,生成规则
18、:取一等边三角形,连接各边中点将原等边三角形等分成4个小等边三角形,然后舍弃位于中间的一个小等边三角形,将剩余3个小等边三角形按同样方法继续分割,并舍弃位于中间的那个等边三角形。如此不断地分割与舍弃,就能得到中间有大量孔隙的Sierpinski垫片。,“病态”原因:总周长趋于无穷,总面积趋于零。也就是说:当用一维得尺度去测量时,其值趋于无穷大,当用二维尺度去度量时,其值趋于0。 分形维数:D=ln3/ln21.585。,生成元:Sierpinski垫片是平面分形,具有自相似性。其生成元是中间舍弃一个小三角形的等边三角形,外部三角形的三个顶点坐标为P0(x0,y0),P1(x1,y1)和P2(x
19、2,y2),内部三角形的三个顶点坐标为P01 (x01,y01),P12(x12,y12)和P03(x03,y03),如图8-20所示。 Sierpinski垫片的递归调用是通过反复使用生成元来取代每一个小等边三角形实现的。,图 8-20 Sierpinski垫片生成元,Sierpinski垫片的生成元顶点坐标之间的几何关系为,,,,,(8-7),void CTestView:Gasket(int n,CP2 p0,CP2 p1,CP2 p2) if(0=n)FillTriangle(p0,p1,p2);return;CP2 p01,p12,p20;p01=(p0+p1)/2;p12=(p1+
20、p2)/2;p20=(p2+p0)/2;Gasket(n-1,p0,p01,p20);Gasket(n-1,p01,p1,p12);Gasket(n-1,p20,p12,p2); ,Sierpinski垫片,2. Sierpinski地毯,生成规则:取一正方形。将每条边三等分,正方形被等分为9个面积相等的小正方形,舍弃位于中间的一个小正方形。将剩下的8个小正方形按上面同样的方法继续分割,并舍弃位于中间的小正方形。如此不断地分割与舍弃,就能得中间有大量空隙的Sierpinski地毯。,“病态”原因:总周长趋于无穷,总面积趋于零。分形维数:D=ln8/ln31.8928。,生成元:把正方形分成9个
21、小正方形,编号为19。舍弃中间的编号为5的小正方形,留下8个小正方形。正方形的左下角点和右上角点是生成元的设计顶点。Sierpinski地毯的递归调用是通过反复使用生成元来取代每一个小正方形实现的。,1,2,3,4,5,6,7,8,9,Sierpinski地毯生成元,8个小正方形的左下角点和右上角点如下。,编号1:,,,编号2:,编号3:,编号4:,编号6:,编号7:,编号8:,,,,,,,,,,,,,编号9:,(8-8),,,,,void CTestView:Carpet(int n,CP2 p0,CP2 p1 )/地毯函数 if(0=n)FillRectangle(p0,p1);retur
22、n;double w=p1.x-p0.x,h=p1.y-p0.y;CP2 p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13;p2=CP2(p0.x+w/3,p0.y);p3=CP2(p0.x+2*w/3,p0.y);p4=CP2(p1.x,p0.y+h/3);p5=CP2(p1.x,p0.y+2*h/3);p6=CP2(p0.x+2*w/3,p1.y);p7=CP2(p0.x+w/3,p1.y);p8=CP2(p0.x,p0.y+2*h/3);p9=CP2(p0.x,p0.y+h/3);p10=CP2(p0.x+w/3,p0.y+h/3);p11=CP2(p0.x
23、+2*w/3,p0.y+h/3);p12=CP2(p0.x+2*w/3,p0.y+2*h/3);p13=CP2(p0.x+w/3,p0.y+2*h/3);,,,,,Carpet(n-1,p0,p10);Carpet(n-1,p2,p11);Carpet(n-1,p3,p4);Carpet(n-1,p9,p13);Carpet(n-1,p11,p5);Carpet(n-1,p8,p7);Carpet(n-1,p13,p6);Carpet(n-1,p12,p1); ,Sierpinski地毯,Sierpinski地毯的一个应用是手机天线。手机要发射和接收无线电波,“天线”在哪里?就在这个手机的内部
24、呀!图中手机内部的天线就是一块“谢尔宾斯基地毯”。因为这种天线呈“分形”状,看起来尺寸不大,但是实际上的尺寸弯弯曲曲总算起来相当的长,这样的手机天线就能做到很小,效率很高,直接在手机内部就能装下来了。,8.2.5 Menger海绵,Menger海绵是由奥地利数学家Menger(Karl Menger,19021985)于1926年提出的一种分形曲线。它结合了Cantor集与Sierpinski地毯的特征。Manger海绵的每个表面是Sierpinski地毯。,生成规则:将一个立方体沿其各个面三等分为27个小立方体,舍弃位于体心的一个小立方体,以及位于立方体六个面心处的6个小立方体。将剩余的20
25、个小立方体继续按相同的方法分割并舍弃位于立方体体心和面心处的更小的立方体。如此不断地分割与舍弃,就能得到中间有大量空隙的Menger海绵。,生成元:Menger海绵是典型的分形立体,具有自相似性。其生成元是把立方体分成27个小立方体,挖去立方体6个面心的小立方体以及位于体心的一个小立方体,共挖去7个小立方体,如图8-24所示。Menger海绵的递归调用是通过反复使用生成元来取代每一个小立方体进行的。,图 8-24 Menger海绵生成元 图 8-25 n0的Menger海绵,对于“前面”,逆时针方向的4个顶点为:,对于“顶面”,逆时针方向的4个顶点为:,对于“右面”,逆时针方向的4个顶点为:,
26、1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,下层结构 中间层结构 上层结构,本例中并未建立立方体的三维几何模型,而是采用立方体的“前面”、“顶面”和“右面”三个表面来代替消隐后的立方体。为了更好地显示立体效果,必须进行消隐,可以采用“画家算法”来完成。对上下层,由下向上逐个绘制;对左右层,由左向右绘制;对前后层,由后向前逐个绘制。这个过程好像画家绘制油画那样,由远及近绘制景物,近处的景物将遮盖远处的景物。在绘制Menger海绵时,动画过程就象砌砖那样从下往上,一层一层地构筑,每一层从左向右,从后向前依次绘制。,对于下层的8个小立方体,小
27、立方体的基准点坐标为,编号1:,编号2:,编号3:,编号4:,编号5:,编号6:,编号7:,编号8:,1,2,3,4,5,6,7,8,对于中层的4个小立方体,小立方体的基准点坐标为,编号9:,编号10:,编号11:,编号12:,9,10,11,12,对于上层的8个小立方体,小立方体的基准点坐标为,编号13:,编号14:,编号15:,编号16:,编号17:,编号18:,编号19:,编号20:,13,14,15,16,17,18,19,20,Menger海绵又“前面”、“顶面”和“右面”组成,采用的是简化了的斜投影画法。,Menger海绵,海绵的三维透视实体模型,正四面体透视镂垫,Menger海绵
28、欣赏,8.2.6 C字曲线,生成规则:以一条直线段为斜边,拉出一个等腰直角三角形。以等腰直角三角形的两条直角边分别为斜边,再拉出两个等腰直角三角形。依此类推,便形成了类似字母C的图形,称为C字曲线。,C字曲线,P(x,y),生成元:C字曲线具有很强的自相似性,是分形图形。生成元是等腰直角三角形。如图8-31所示。C字曲线的递归是通过反复以生成元的直角边作为斜边拉出等腰直角三角形而建立起来的。,P(x,y),P1(x1,y1),P0(x0,y0),图8-31 C字曲线生成元,由直线段的两个顶点坐标P0(x0,y0),P1(x1,y1)容易得到第三个顶点坐标P(x,y)为,,,8.2.7 Cayl
29、ey树,生成规则:以如图8-32(a)所示二叉树为基础,以每个分支为主干,按照比例递归出另一个二叉树。依此类推,便生长成疏密有致的分形树,称为Cayley树。,生成元:Cayley树是完全自相似的分形结构。生成元是二叉树。树根起点坐标为P0(x0,y0),树干和地面的夹角为,树干长度为h;树叉坐标为P1(x1,y1);树枝和树干的夹角为,树枝端点坐标为P2(x2,y2)和P3(x3,y3);树干和树枝的比例为s。Cayley树各坐标之间的几何关系如下:,P2(x2,y2),P3(x3,y3),P1(x1,y1),P0(x0,y0),h,,,(8-11),void CTestView:Cayle
30、y(int n, CP2 p0, double height, double theta)/Cayley函数 CP2 p1,p2,p3;double Scale=2.0/3.0;if(1=n) return;p1.x=p0.x+height*cos(theta);p1.y=p0.y+height*sin(theta);p2.x=p1.x+Scale*height*cos(theta+Alpha);p2.y=p1.y+Scale*height*sin(theta+Alpha);p3.x=p1.x+Scale*height*cos(theta-Alpha);p3.y=p1.y+Scale*heig
31、ht*sin(theta-Alpha);pDC-MoveTo(Round(p0.x),Round(p0.y);pDC-LineTo(Round(p1.x),Round(p1.y);pDC-LineTo(Round(p2.x),Round(p2.y);pDC-MoveTo(Round(p1.x),Round(p1.y);pDC-LineTo(Round(p3.x),Round(p3.y); Cayley(n-1,p1,Scale*height,theta+Alpha);Cayley(n-1,p1,Scale*height,theta-Alpha); ,Cayley树,黄金树,8.3 L系统模型,
32、1968年,美国生物学家A.Lindenmayer为把形式语言理论应用到生物学中,创立了一种并行重写系统。它是描述生物体生长发育过程的数学理论,称作Lindenmayer系统,简称L系统(L-System)。1984年,A.R.Smith首次将L系统与计算机图形学结合起来,为计算机模拟植物生长过程提供了一个有力的工具,在计算机上生成了大量栩栩如生的植物形态。L系统文法构图法是仿照语言学中的语法生成方法来构造图形的一种算法。,Aristid Lindenmayer (1925-1989),Alvy Ray Smith,1. 文法模型,L系统的本质是利用字符串替换算法进行的字符串重写系统,通过对植
33、物生长过程的概括和抽象,确定初始状态(公理)与生成规则,通过有限次迭代生成字符序列以表现植物的拓扑结构,并对生成的字符串进行几何解释,就能绘制非常复杂的分形图形。 字母表:使用到的字母; 公理:初始字符串; 生成规则:字符串的变换形式;,2. 绘图规则,常采用“龟形图法”对L系统进行图形说明。设想有一只乌龟在海滩上爬行,其当前状态用三个参数描述,记为S(x ,y ,),其中x , y 为乌龟所在位置的直角坐标,为乌龟爬行的方向。假定乌龟爬行的步长为L,在爬行方向上的角度改变量为。,L,+ ,- ,(1)F:向前爬行一步d并画线。,乌龟从状态S(x , y , )移动到状态S(x,y,),(8-
34、12),(5) :从堆栈中弹出一个状态作为乌龟的当前状态,但不画线;,从(x,y)向(x,y)画一条线。,(2):逆时针旋转角,龟的新状态为S(x,y,+);,(3):顺时针旋转角,龟的新状态为S(x,y,-);,(4) :将当前乌龟爬行的状态压入堆栈,信息包括乌龟所在的位置与方向等,但不画线;,8.3.2 Koch曲线,绘图规则: (1)F:生成元最小线元长度,步长为d。 (2):逆时针方向旋转角。 (3):顺时针方向旋转角。,文法模型: 字母表为:F,。 初始字母为:F。 生成规则:FFFFF。 迭代结果如下。 迭代0:F。 迭代1:FFFF。 迭代2:FFFFFFFFFFFFFFFF。
35、,Koch曲线L系统模型算法,8.3.3 分形草,在绘制植物时,需要处理分支结构。在L系统文法模型中,记录分枝点,需要使用“”和“”绘图规则。,绘图规则: (1)F:代表主干和旁枝,步长为d。 (2):逆时针方向旋转角。 (3):顺时针方向旋转角。 (4):存储分枝点。 (5):恢复分枝点。 文法模型: 字母表为:F,。 初始字母为:F。 生成规则为:FFFFFFFFF ,如图8-37所示。,P0,F,-,F,F,+2,F,+,-,图 8-37 分形草L系统模型,F,F,F,F,分形草L系统模型算法,8.3.4 Peano-Hilbert曲线,Peano-Hilbert曲线的特点是单入单出,需
36、要两个生成规则的嵌套来实现。这里取90。 绘图规则: (1)F:向前移动一步,步长为d。 (2):逆时针旋转角。 (3):顺时针旋转角。 文法模型: 字母表为:F,X,Y。 初始字母为:X 。 生成规则1为:XYFXFXFY,如图8-39所示。 生成规则2为:YXFYFYFX,如图8-40所示。,图 8-39 规则1的L系统模型 图 8-40 规则2的L系统模型,迭代结果如下: 迭代0:X。 迭代1:YFXFXFY 迭代2:XFYFYFXFYFXFXFYFYFXFXFYFXFYFYFX。 本文法模型中,X和Y只进行字符串的替换不用于绘图,只根据F、,绘图。,迭代2所对应的图形,HilbertL
37、系统模型算法,8.3.5 分形灌木丛,可以按照Peano-Hilbert曲线的嵌套方法构造非常逼真的灌木丛。 绘图规则如下: (1)F:向前移动一步,步长为L。 (2):逆时针旋转角。 (3):顺时针旋转角。 (4):将当前状态压栈,存储分枝结点。 (5):将图形状态重置为栈顶的状态,恢复分枝结点。 文法模型如下: 字母表为:,X,Y。 初始字母为:XXXX,如图8-43所示。 生成规则1为:XXXXXYYYYXXYYY,如图8-44所示。 生成规则2为:YYYY,如图8-45所示。,图 8-43初始字母的L系统模型 图 8-44规则1的L系统模型,图8-45规则2的L系统模型,迭代结果如下:
38、 迭代0:XXXX。 迭代1:XXXXYYYYXXYYYXXXXYYYYXXYYYXXXXYYYYXXYYYXXXXYYYYXXYYY。 ,分形灌木丛算法,8.4 IFS迭代函数系统模型,1985年美国佐治亚理工学院的M.F.Barnsley (Michael Fielding Barnsley ,1946)首先应用一组仿射变换族模拟自然景物,并将仿射变换集称为迭代函数系统。IFS的基本思想是,分形具有局部与整体的自相似性,也就是说局部是整体的一个小复制品,只是在大小、位置和方向上有所不同而已;而仿射变换是一种线性变换,正好具有把图形放大、缩小、旋转和平移的性质。因此,产生一个复制品的过程就相
39、当于对图形做一次压缩仿射变换。从原则上说,任何图形都可以用一组压缩仿射变换来描述或生成,而不断重复应用压缩仿射变换就是一个迭代过程。,迭代函数系统(iterated function system,IFS)最早由Hutchinson于1981年提出,它是基于数学基础的。,M.F.Barnsley,8.4.1 仿射变换,二维仿射变换的公式表示为,(8-13),矩阵表示为,式中代表仿射变换,P(x,y)是仿射变换前的坐标点,P(x,y)是仿射变换后的坐标点。a、b、c、d、是变形系数e、f是平移系数。,由第五章知道,二维仿射变换的齐次坐标矩阵表示为,仿射变换矩阵为,仿射变换可以通过一系列基本变换的
40、复合变换来实现,包括:平移、比例、旋转、反射和错切。,1. 平移变换,(8-14),2. 比例变换,(8-15),3. 旋转变换,(8-16),4. 反射变换,关于原点的反射变换矩阵,(8-17),关于x轴的反射变换矩阵,(8-18),关于y轴的反射变换矩阵,(8-19),5.错切变换,(8-20),仿射变换最主要的性质是保留了直线的“平直性”和“平行性”。 (1)平直性:仿射变换是线性变换,直线段经仿射变换后仍为直线段,并且保持直线上点的定比关系不变。 (2)平行性:两条平行直线经仿射变换后,仍然保持平行。,8.4.2 IFS,1.压缩仿射变换,并不是所有的仿射变换都适合于迭代函数系统,迭代
41、函数系统只能使用压缩仿射变换。如果图形上的各点经过仿射变换后,各点之间的距离变小,这种仿射变换就称为压缩仿射变换。压缩仿射变换主要用于控制生成的图形不发散。压缩仿射变换可以使一个图形产生它的一个复制品,即将原图分解为几部分,每一部分都可看作是在不同仿射变换下的复制品。这种分解与尺度无关,也就是说原图经压缩仿射变换后仍然可以对局部图形进行类似分解,这种整体与局部的自相似性正是分形的特征。若干个压缩仿射变换族的组合称为IFS。,(8-21),压缩仿射变换族i控制了图形的结构和形状,由于压缩仿射变换的形式是相同的,所以不同的图形仅取决于压缩仿射变换的系数。在压缩仿射变换族中每一个压缩仿射变换被调用的
42、概率P不一定相同,这种概率称为伴随概率。 若令压缩仿射变换族为i(i1,2,n),各压缩仿射变换对应的伴随概率为:1Pi0(i1,2,n),且有,(8-22),压缩仿射变换族i与对应的伴随概率Pi确定了IFS码,IFS码由6个压缩仿射变换系数a、b、c、d、e、f和伴随概率P组成。,2.仿射变换矩阵的分解,仿射变换可以理解为对坐标点进行比例,旋转,平移等变换后取得的新坐标值。,仿射变换矩阵,可以分解为平移变换矩阵,、比例变换矩阵,、旋转变换矩阵,等的组合。,矩阵相乘的次序由具体的仿射变换确定。,3.初始值问题,压缩映射不动点定理:每一个迭代函数系统都定义了一个唯一的分形图形,这个分形图形称为该
43、迭代函数系统的吸引子(attractor)。直观地说,吸引子就是迭代生成点的聚集处。吸引子由IFS码中的仿射变换族i(i1,2,n)控制,相应伴随概率Pi控制该仿射变换在迭代过程中被选中的几率。这说明IFS码就可确定分形图形的形状而与初始值无关。也就是说,无论初始值如何,相同的IFS码最终可产生相同的图形。,混沌游戏:随机产生A、B、C三点,给定初始点K,当随机产生的点是A点,则K0取K与A连线的中点;当随机产生的点是B点,则K1取K0与B连线的中点;当随机地产生的是C点时,则K2取K1与C连线的中点;依次类推,设第n次迭代的点为Kn,则第n1次迭代的点为Kn+1。,混沌游戏的模型,void
44、CTestView:ChaosGame(int n) CP2 Pk(100,100),K;CP2 Pa(0,300); /三角形顶点A的坐标CP2 Pb(-300,-300); /三角形顶点B的坐标CP2 Pc(300,-300); /三角形顶点C的坐标for(int i=0;iSetPixelV(Round(Pk.x),Round(Pk.y),RGB(Pk.x*r,r*200,Pk.y*r*1000); ,8.4.3 Koch曲线,Koch曲线共由4四段直线组成,如图8-49所示。,图 8-49 Koch曲线的IFS模型,AC:直线长度缩小1/3。即只进行比例变换,SxSy1/3。,CD:向
45、右平移1/3,直线长度缩小1/3,逆时针旋转60。,DE:向右平移1/2,向上平移,直线长度缩小1/3, 顺时针旋转60。,EB:向右平移2/3,直线长度缩小1/3。,取伴随概率为1/4,这样就得出了Koch曲线的IFS码,见表8-1。生成的图形如图8-50所示。,Koch曲线的IFS算法,源程序,8.4.4 Sierpinski垫片,Sierpinski垫片是由一等边三角形,连接各边中点将原三角形分成4个小三角形,然后舍弃位于中间的一个小三角形构成的分形图案,如图8-51所示。,A,F,B,D,E,图 8-51 Sierpinski垫片IFS模型,C,BDF:边长为原三角形的一半,即只进行比
46、例变换,FEC:向右平移1/2,边长为原三角形的一半。,DAE:向右平移1/4,向上平移1/2,边长为原三角形的一半。,取伴随概率为1/3,这样就得出了Sierpinski垫片的IFS码,见表8-2。生成的图形如图8-52所示。,图 8-52 Sierpinski垫片IFS图形,8.4.5 Barnsley蕨,蕨类植物(Ferns)是著名的分形,不管放大或缩小多少倍,图形都是自相似的。这种蕨类图形被称为Barnsley蕨,是以IFS的首创者Michael Barnsley的名字命名的。表8-3是Barnsley蕨的IFS码,绘制效果如图8-53所示。,图 8-53 Barnsley蕨的IFS图
47、形,8.4.6 枫叶拼贴,对于规整的图形,可以明显地找出几何关系来确定相应的IFS码,而对于不规整的图形(如枫叶),常采用拼贴的方法获得其IFS码。,由仿射变换公式(8-13)知道,给定6个点,可以列出如下6 个方程,解方程组求得变换系数a,b,c,d,e,f,就可以确定一个仿射变换。这只要在分形图形的整体轮廓上选取三个特征点,然后再在各个局部轮廓上按相同的顺序选取对应的三个特征点,就可以获得从整体到各个局部的仿射变换。,(8-13),原图,4个拼贴子图,(x1,y1),(x2,y2),(x3,y3),(x1,y1),(x2,y2),(x3,y3),将6个特征点分别代入公式。,得到,针对拼贴的
48、每一片枫叶求解线性方程组计算一组仿射变换系数a,b,c,d,e,f。,枫叶拼贴效果图,8.5 本章小结,分形几何是科学与艺术相融合的一门新学科,是计算机图形学的一个崭新的应用领域。计算机图形学搭建起了科学和艺术的桥梁,将枯燥的数学公式表现为具体的视觉感受。本章在介绍分形的基本原理、分维的计算方法等概念的基础上,主要讲解了Cantor集、Koch曲线、Peano-Hilbert曲线、Sierpinski垫片、Sierpinski地毯、Menger海绵等曲线的递归模型。在L系统模型中给出了文法生成规则,绘制了分形植物,L系统的关键是确定生成规则。IFS方法是分形的最有特色的领域,确定了IFS码就可以绘制图形。同时IFS算法也是分形图形压缩的基础,有兴趣的读者可以参考相关书籍学习。,