跨越分形
<FONT size=2> 作为一门新兴学科,分形不但受到了科研人员的青睐,而且因为其广泛的应用价值,正受到各行各业人士的关注。那么,在我们开始学习分形之前,首先应该明白的一件事情是:我们正在学习什么?或者说:什么是分形? <BR> <BR> 严格地而且正式地去定义分形是一件非常复杂而且困难的事情。但是,有一些不太正规的定义却可以帮助我们理解分形的含义。在这些定义中,最为流行的一个定义是:分形是一种具有自相似特性的现象、图象或者物理过程。也就是说,在分形中,每一组成部分都在特征上和整体相似,只仅仅是变小了一些而已。 <BR> <BR> 让我们来看下面的一个例子。下图是一棵厥类植物,仔细观察,你会发现,它的每个枝杈都在外形上和整体相同,仅仅在尺寸上小了一些。而枝杈的枝杈也和整体相同,只是变得更加小了。那么,枝杈的枝杈的枝杈呢?自不必赘言。 <BR> <BR></FONT><DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330028a.gif" align=center border=0></SMALL>
<P align=center><SMALL>图1.1 分形植物</SMALL></P>
<P align=left><SMALL><BR> <BR> 如果你是个有心人,你一定会发现在自然界中,有许多景物和都在某种程度上存在这种自相似特性,即它们中的一个部分和它的整体或者其它部分都十分形似。其实,远远不止这些。从心脏的跳动、变幻莫测的天气到股票的起落等许多现象都具有分形特性。这正是研究分形的意义所在。例如,在道·琼斯指数中,某一个阶段的曲线图总和另外一个更长的阶段的曲线图极为相似。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330028b.jpeg" align=center border=0></SMALL>
<P align=center><SMALL>图1.2 分形风景</SMALL></P>
<P align=left><SMALL><BR> <BR> 上图中的风景图片又是说明分形的另一很好的例子。这张美丽的图片是利用分形技术生成的。在生成自然真实的景物中,分形具有独特的优势,因为分形可以很好地构建自然景物的模型。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330028c.gif" align=center border=0></SMALL>
<P align=center><SMALL>图1.3 Mandelbrot集的放大<BR> </SMALL></P>
<P align=left><SMALL><BR> 除了自相似性以外,分行具有的另一个普遍特征是具有无限的细致性。上面的动画所演示的是对Mandelbrot集的放大,只要选对位置进行放大,就会发现:无论放大多少倍,图象的复杂性依然丝毫不会减少。但是,注意观察上图,我们会发现:每次放大的图形却并不和原来的图形完全相似。这告诉我们:其实,分形并不要求具有完全的自相似特性。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330028d.jpeg" align=center border=0></SMALL></P>
<P align=center><SMALL>图1.4 月球模型</SMALL></P>
<P align=left><SMALL><BR> <BR> 不管你信不信,上面的这张月球表面的照片也是用分形技术生成的。如果你把图片放大观看,也可以看到更加细致的东西。因为,分形能够保持自然物体无限细致的特性,所以,无论你怎么放大,最终,还是可以看见清晰的细节。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330028e.gif" align=center border=0></SMALL>
<P align=center><SMALL>图1.5 Kohn雪花<BR> </SMALL></P>
<P align=left><SMALL><BR> Kohn雪花和Sierpinski三角形也是比较典型的分形图形,它们都具有严格的自相似特性(仔细看看,是不是这样?)。但是在前面说述的Mandelbrot集合却并不严格自相似。所以,用“具有自相似”特性来定义分形已经有许多局限了,在接下来的课程中,我们将继续探讨分形的含义。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330028f.gif" align=center border=0></SMALL>
<P align=center><SMALL>图1.5 Sierpinski三角形 </SMALL></P></DD></DL> <P align=center><SMALL>——分形的起源<BR> </SMALL></P>
<P align=left><SMALL><BR> 其实,分形的研究可以上溯到很久以前。大约100年前分形的思想已经开始出现在数学领域。但是,就象其它的一些革命性的思想一样,分形的研究受到了主流学术的谴责,被人们认为只是研究一些数学中的怪异现象。那个时候著名的数学家 Charles Hermite 把分形称为“怪物”,这代表了绝大多数人的观点。 <BR> <BR></SMALL></P>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330030a.jpeg" border=0></SMALL>
<P align=center><SMALL>图2.1 分形风景 </SMALL></P>
<P align=left><SMALL><BR> <BR> IBM公司的数学家 Benoit B. Mandelbrot 认真地研究了分形与自然的关系。他象人们展示了分形广泛地存在于我们身边,一些现象都能够用分形来进行准确的描述。他和他的同事们用分形来描述树和山等复杂事物。他还扩展了维数的概念,开创性地提出了分数维的概念,并创造了“fractals”一词。“fractals”就是我们所说的“分形”,也叫“分维”,台湾的学者则称之为“碎形”。为了褒奖 Mandelbrot 的突出贡献,人们把他称为“分形之父”。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330030b.gif" border=0></SMALL>
<P align=center><SMALL>图2.2 Mandelbrot集 <BR> </SMALL></P>
<P align=left><SMALL><BR> 象所有伟大的思想家 (例如牛顿、爱因斯坦)一样,Mandelbrot的工作也建立在前期一些数学家的研究成果之上。Gaston Julia、Pierre Fatou 以及 Felix Hausdorff 等一些伟大的科学家都是这个领域的先驱,他们都为 Mandelbrot 的开创性研究铺平了道路。Mandelbrot 的研究成果激励了许多在这个领域感兴趣的学者,并继而使分形成为现代科学中的热门学科。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330030c.jpeg" border=0></SMALL>
<P align=center><SMALL>图2.3 分形风景 </SMALL></P>
<P align=left><SMALL><BR> <BR> 分形的许多理论和应用刚刚被人们发现。尽管分行的应用十分广泛,但在当前的研究中,图象压缩是分形应用中比较诱人的一个领域。因为自然景物可以利用分形表述,所以,分形在压缩图象上非常有用。我们将在后面对这个领域进行专门的介绍。现在,我们开始认识分形的特性。 </SMALL></P></DD></DL> <P align=center><SMALL>——分形的特征<BR> </SMALL></P>
<P align=left><SMALL><BR> 通过前面的介绍,我们已经知道:分形最明显的特征是自相似性,其它的特征包括无限复杂、无限细致等。但是,分形的正式定义是依据分维(分数维)来判断的。因为分维的概念非常复杂,所以,我们先继续研究分形的自相似特性,为分数维的研究奠定基础。 <BR> <BR></SMALL></P>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330031a.gif"></SMALL>
<P align=center><SMALL>图3.1 Sierpenski垫圈</SMALL></P>
<P><SMALL><BR> <BR> 自然界中许多植物具有自相似特性,例如,我们在前面所介绍的分形植物。在这棵厥类植物中,枝杈是整个植物的小版本,而枝杈的枝杈则是更小的版本。这种特性可以无限地持续下去。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330031b.gif"></SMALL>
<P align=center><SMALL>图3.2 分形植物 </SMALL></P>
<P align=left><SMALL><BR> <BR> 许多著名的分形图形都能展现这种自相似性。例如下图所示的Sierpenski三角形。在Sierpenski三角形中每个小三角形都是大三角形的更小版本。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330031c.gif"></SMALL>
<P align=center><SMALL>图3.3 Sierpenski三角形 <BR> </SMALL></P>
<P align=left><SMALL><BR> 前文提到的另一个著名的分形图形是Koch 雪花,它象Sierpenski一样,表现出完全的自相似的特性。但是,这里的自相似体现在:每一个边都是由它的更小版本组成,而整个图形并没有重复。也就是说,这时的自相似的实质应该是某一个部分在其它地方重复出现。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330031d.gif"></SMALL>
<P align=center><SMALL>图3.4 koch曲线 </SMALL></P>
<P align=left><SMALL><BR> <BR> Julia 集也是一个非常好的具有自相似特征的分形图形。仔细观察下面的动画你会发现,许多部分都在其它地方重复出现。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330031e.gif"></SMALL>
<P align=center><SMALL>图3.5 Julia集的放大 </SMALL></P>
<P align=left><SMALL><BR> <BR> 下面这幅图是真实拍摄的一张厥类植物的图片。它也具有自相似特性。但是,它并不象计算机生成的分形图形那样严格地自相似,这大概是因为在成长过程中,受到了许多外界因素的影响吧。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330031f.gif"></SMALL>
<P align=center><SMALL>图3.6 真实的植物 </SMALL></P>
<P align=left><SMALL><BR> <BR> 正是因为分性所具有的自相似特性,才使分形如此重要并且具有实际应用意义。很多物体都可以通过分形来精确描述。因为分形可以描述植物、雪花等自然物体,同样也可以生成风景图象,甚至是音乐作品,我们将在后续的文章中进一步讨论。 <BR> <BR> 我们通过前面的介绍还了解到:分性的另一个重要特征是具有无限精细和无限复杂性。 但是,应该记住,无论师资相似性还是无限精细性都不能用来科学地定义分形,因为这些都只是分形中普遍存在的特点。为了定义分形,必须引进分维的概念。从下节开始,我们将探讨分维,这是一个很有趣但也很难掌握的概念。</SMALL></P></DD></DL> <P align=center><SMALL>——分维</SMALL></P>
<P align=left><SMALL><BR> <BR> 分维?你是说还有一个2.8126维的物体吗?是的!尽管听起来似乎比较荒诞,但这是事实。在这个概念的基础上才有分形学的发展,这个概念也可能会进一步改变我们的世界观。在前面我们曾介绍过“分形之父” Benoit Mandelbrot ,他正是从分维的概念出发创造了“分形”(Fractal)这个词。 因为这是一个非常复杂的问题,所以我们必须慢速前进。让我们先作一个类比。 <BR> <BR> 牛顿是1600年代时代的人物。牛顿的运动学定律可以使人们预测运动物体的运动情况。但是,当运动物体的速度接近光速时,这个定理就变得极不准确。于是,在1900初,爱因斯坦发明了相对论。这个成果发展了牛顿定律。如果你去检验相对论,你会发现,在低速的情况下,相对论的结果等同于牛顿定律。 <BR> <BR> 那么,这和分维有什么联系呢?象相对论发展了传统力学一样,分维是对传统维数概念的进一步发展。它并不和你所了解的分维知识相冲突,而是一种发展!我们正要拓展你的关于维数的概念,而引进分数维的概念。 <BR> <BR> 我们生活在一个具有长度、宽度和深度的三维世界里。你可能知道:一个平面是二维的,一条直线是一维的,而一个点呢?零维的!我们能够想象具有类似维数的任何物体。但是,你能想象一个具有1.2618维的物体吗?或许不能吧?那么,下图所演示的Koch曲线就是1.2618维的。 <BR> <BR></SMALL></P>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330032a.gif"></SMALL>
<P align=center><SMALL>图4.1 Koch曲线的形成 </SMALL></P>
<P align=left><SMALL><BR> <BR> 为了构造Koch曲线,我们首先作一条直线,然后在直线的中央作一个等边三角形,于是,直线变得复杂一些。然后,再在每一条线段的中央分别作一个等边三角形,这条直线变得更加复杂。依照此法,无限制地进行下去,就形成了Koch曲线。这个时候,这条直线开始接近一个平面,因为它明显地具有“高度”,但是,更精确地说,它却并不是一个平面,或者说,并不是一个二维的曲线。它的维数只有1.2618。为什么这样说呢?因为它高过一维,但却不到二维? <BR> <BR> 听起来是不是够玄乎的?不过,不要着急,我们将介绍更多的例子来帮助你来理解分维的概念。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330032b.gif"></SMALL>
<P align=center><SMALL>图4.2 Sierpinski三角形的演变 </SMALL></P>
<P align=left><SMALL><BR> <BR> 在Sierpinski三角形中,我们首先作一个完全填充的三角形(二维)。然后,我们从中间移去一个三角形,然后再在剩下的三角形中分别移去一个三角形。最终它的面积等于零了,于是,它的位数自然小于 2 ,但是却永远达不到 1 ,因为,无论何处,它都不接近一条线。所以,它的维数也在2与1之间,经过数学计算,它的真正维数大约是1.5850。 <BR> <BR> 现在你理解了分维的概念了吗?但愿如此吧!尽管这种思想非常奇怪,但却非常美妙,特别对于数学研究来说。你现在明白了吗?如果还不明白的话,回过头,把这部分内容再阅读一遍,相信你会有更多的收获。 <BR> <BR> 现在,你已经了解分维的意思了,那么,怎么计算分维呢?在学习分维的计算方法之前,你应该对代数知识(特别是对数)知识有一定的了解。 <BR> <BR> 假如你把一条直线分为 N 段,那么,你就有了原始直线的 N 个更小的版本,每一个都按照一个比例系数 r 减小,在这里 Nr = 1。对一个正方形来说,也分成几个小的正方形,也让每一正方形的每边的缩放比例为 r 。注意,这个时候 N 和 r 的关系是 Nr^2 = 1。 <BR> <BR> 现在,我们可以归纳出分维来了。假设你把一个 d 维物体分为 N 等份,每一份的缩放比例是 r,二者的关系是 Nr^d = 1。 <BR> <BR> 经过数学计算,我们可以得到 d = (log N) / (log (1/r))。 <BR> <BR> 对于Koch曲线来说,我们把它分成了四个等份,而每一等份是原来尺寸的 (1/3)。所以有 N = 4 和 r = 1/3。运用上面的等式,可以计算 d = (log 4) / (log 3) ≈ 1.261859507143。 <BR> <BR> 在Sierpinski三角形中,我们把三角形分成了三个相等的部分。而每一部分的边长和高只是原先三角形的 (1/2) ,所以 N =3 并且 r = 1/2 ,根据等式计算的结果则是 d = (log 3) / (log 2),结果大约等于 1.584962500721. <BR> <BR> 现在,你应该知道怎么计算简单的分维了吧?还有很多种方法是专门用来计算非自相似分形的分维数的。在后续的文章中,你将会知道通过分形的方法可以计算海岸线,但是海岸线却并不是真正的自相似,所以必须运用近似计算方法。 <BR> <BR> 现在我们已经知道分形的原理,并且也初步学会了分维的计算,下一步我们要学习什么呢?当然是分形的生成和分形的应用了。 <BR></SMALL></P>
<P align=right><SMALL><BR> </SMALL></P></DD></DL> <P align=center><SMALL>——创造分形</SMALL></P>
<P align=left><SMALL><BR> <BR><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330035a.gif"> 在以后的几讲里,我们将开始学习通过不同的方式来创造分形。在学习的过程中,你也能了解分形的种类。如果你能理论联系实际的绘画,马上你就可以运用自己所学的知识了。 <BR> <BR> 你可以创造很多种不同类型的分形图形,有些较为简单,而有些则比较复杂。我们已经在前面的课程中认识了一些分形图形,我们将在以后的课程中逐渐学习它们的制作方法,下面,我们首先来人是几类分形图形。 <BR> <BR></SMALL></P>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330035b.gif"></SMALL>
<P align=center><SMALL>迭代函数系统(随机型)<BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330035c.gif"></SMALL>
<P align=center><SMALL>Mandelbrot集<BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330035d.gif"></SMALL>
<P align=center><SMALL>L-系统<BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330035e.gif"></SMALL>
<P align=center><SMALL>迭代函数系统(确定型)<BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330035f.gif"></SMALL>
<P align=center><SMALL>Henon映射</SMALL></P>
<P align=left><SMALL><BR> <BR> 对我们来说,由许多非常有趣的分形值得我们去学习。这里所列举的只是其中的一小部分,还有很多其它类型的分形可以产生山、3D树以及分形音乐。这些类型分形我们将在以后的分形应用里专门谈论。现在,我们首先从迭代函数系统开始明天的内容。 </SMALL><SMALL></SMALL></P></DD></DL> <STRONG> </STRONG>
<P align=center><SMALL>分形的类型</SMALL></P>
<P><SMALL><BR> <BR> 在以后的几讲里,我们将开始学习通过不同的方式来创造分形。在学习的过程中,你也能了解分形的种类。如果你能理论联系实际的绘画,马上你就可以运用自己所学的知识了。 <BR> <BR> 你可以创造很多种不同类型的分形图形,有些较为简单,而有些则比较复杂。我们已经在前面的课程中认识了一些分形图形,我们将在以后的课程中逐渐学习它们的制作方法,下面,我们首先来认识几类分形图形。 <BR> <BR></SMALL>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330037a.gif"></SMALL></P>
<P align=center><SMALL>迭代函数系统 (随机型)</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330037b.gif"></SMALL></P>
<P align=center><SMALL>Mandelbrot集</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330037c.gif"></SMALL></P>
<P align=center><SMALL>L-系统</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330037d.gif"></SMALL></P>
<P align=center><SMALL>迭代函数系统(确定型)</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330037e.gif"></SMALL></P>
<P align=center><SMALL>Julia集</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330037f.gif"></SMALL></P>
<P align=center><SMALL>Henon映射</SMALL></P>
<P><SMALL><BR> <BR> 对我们来说,由许多非常有趣的分形值得我们去学习。这里所列举的只是其中的一小部分,还有很多其它类型的分形可以产生山、3D树以及分形音乐。这些类型分形我们将在以后的分形应用里专门谈论。现在,我们首先从迭代函数系统开始下面的教学程序。 <BR></SMALL></P></DD></DL> <STRONG> </STRONG>
<P align=center><SMALL>迭代函数系统(I)</SMALL></P>
<P><SMALL><BR> <BR> 你可以用迭代函数系统来创作形态各异的分形作品。迭代函数系统也有很多应用——包括创作3维分形树。但是,什么是迭代函数系统呢? <BR> <BR> 迭代函数系统是从一个坐标系到另一个坐标系的映射系统。嗯?是不是觉得这句话很难理解?不过,没有关系,这只是技术上的定义,我们可以用现实的例子来更浅显地描述它。 <BR> <BR> 你肯定知道加印照片的影印机,它能缩小或者放大照片,假设有一台影印机可以按照任意形状(如平行四边形)缩放照片,那么这就是一个迭代函数系统。映射方式告诉影印机复印什么内容、在什么地方复樱让我们先来看一看下面的一个分形图。 <BR> <BR></SMALL>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330038a.gif"></SMALL></P>
<P align=center><SMALL>螺旋分形的框架</SMALL></P>
<P><SMALL><BR> <BR> 我们把上图中的平行四边形(包括正方形、长方形)叫做框架。框架定义了映射的方式,以图中蓝色框架为例,就是把整个螺旋按照这个形状加以复制,复制的结果就是蓝色的小螺旋。很显然,这很好地体现了分形的子相似特性。 <BR> <BR> 注意图中的每一个框架都包括了一个螺旋——包括外围的黑色框架,我们称它为范围框架(bounding frame)。事实上,影印机正是在范围框架内复制分形的。但是,如果分形不存在的话,影印机又是怎么复制分形的呢?毕竟,我们是直接把分形图幸福知道范围框架中去的啊! <BR> <BR> 其实,有两种方法可以产生迭代函数系统,一种是随机的方法,又被人们称为混沌游戏。依照这种方法,你首先在范围框架内随机放置一个点,然后,再随机选择一个框架,接着把这个点映射到这个框架内,这个饿过程可以通过下图中的动画加以说明演示。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330038b.gif"></SMALL></P>
<P align=center><SMALL>构造螺旋分形的动画</SMALL></P>
<P><SMALL><BR> <BR> 在上图演示的动画过程中,我们首先在范围框架的中心做一个点,接着,从五个框架中随机挑选一个(不包括范围框架)。图中,随机选择的结果是蓝色框架,所以就在蓝色框架的中间同样作一个点,这样,范围框架的上半部分就有了一个点。我们再随机选择另外的一个框架,这次,选中了绿色框架。那么,就在绿色框架的上半部分作一个点,这个过程被一遍又一遍地重复,就得到了一幅完美的分形图。 <BR> <BR> 在迭代函数系统中,框架其实给整个系统传递三条信息。首先,框架决定怎么转换整个图。这是由框架坐标原点与范围框架坐标原点的距离以及方向来决定。其次,框架的方向以及框架的大小决定怎么缩放整个图,这其实是定义了一个仿射变换,数学上的仿射变换是一种由旋转、平移、映射构成的变换,仿射变换可以由一个函数来表示,这也正是命名“迭代函数系统”的原因。简单地说,迭代函数系统就是指把仿射变换函数系统经过多次迭代形成的分形。 <BR> <BR> 怎么样去随机地选择一个框架就能够产生分形了呢?回答这个问题需要比较高深的数学知识。 <BR> <BR> 从上面的过程中,我们可以知道:点聚集起来形成分形,但是我们还是删除开始的500个点。这种随机的方法和真正产生分形的过程时非常相近的,并不是所有的点都被保留下来,那些不正确的点都被删除了(产生不正确的点的概率微乎其微。)。 <BR> <BR> 还有另外一种方法可以产生迭代函数系统,但是,它更费时,也需要更多的内存。 </SMALL>
<DL></DL></DD></DL> <STRONG> </STRONG>
<P align=center><SMALL>迭代函数系统(II)</SMALL></P>
<P><SMALL><BR> <BR> 在上一讲里我们一起学习了迭代函数系统,并知道了怎么通过随机的方法生成分形图,生成迭代函数系统的第二种方法是确定的方法。确定法可以制作出非常完美得分形图形,但正如我们再上一讲里所介绍的那样,这种方法比较费时,也需要大量的内存。 <BR> <BR> 下面我们将通过一个实例来学习用确定法生成迭代函数系统的方法。首先,指定一个范围框架。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039a.gif"></SMALL></P>
<P align=center><SMALL>范围框架</SMALL></P>
<P><SMALL><BR> <BR> 接着,我们在范围框架内,放置一个框架。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039b.gif"></SMALL></P>
<P align=center><SMALL>范围框架内的框架</SMALL></P>
<P><SMALL><BR> <BR> 接着,我们复制图中的一切,并且进行变形,以适合框架的大小,然后放入框架内。本例比较简单,因为只有一个框架。继而,我们擦除原先的框架,保留刚作的框架,象我们在图中看到的一样,这个框架比刚刚擦除的框架略微小了一点。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039k.gif"></SMALL></P>
<P align=center><SMALL>第一次迭待到第二次迭代</SMALL></P>
<P><SMALL><BR> <BR> 我们按照这种方法,不断将范围框架内的一切复制、变形装入新的框架内,然后再擦除原先的框架。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039c.gif"></SMALL></P>
<P align=center><SMALL>第二次迭待到第三次迭代</SMALL></P>
<P><SMALL><BR> <BR> 正如上图中看到的那样,我们又只剩下一个框架了,比前一个框架更小了一些。假如我们不停地做下去,最终,在范围框架中只剩下一个点了。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039d.gif"></SMALL></P>
<P align=center><SMALL>结果</SMALL></P>
<P><SMALL><BR> <BR> 我相信,现在你对这种方法应该有一个深刻印象了。刚才我们经过了一个漫长而单调的过程得到了一个小点。 <BR> <BR> 事实上,这只是迭代函数系统中一个最简单的例子。如果,我们在开始的时候在范围框架内放置了许多小框架,那么,我么将会得到一个有趣得多的图形。下面,我们重新开始。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039e.gif"></SMALL></P>
<P align=center><SMALL>一次迭待到二次迭代</SMALL></P>
<P><SMALL><BR> <BR> 和只有一个框架时处理过程一样,只是第一次迭代以后,从一个框架变成了四个框架。我们把范围框架内的一切(也就是四个小框架)在复制到每个小框架内。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039f.gif"></SMALL></P>
<P align=center><SMALL>二次迭代到三次迭代</SMALL></P>
<P><SMALL><BR> <BR> 我们再从四个框架开始,经过一次迭代后,就得到了16个框架。下一步怎么办呢?你肯定已经知道了,把16个框架再赴直到16个框架之中,这样,我们就有了256个框架。框架的数目在飞速增加。如果我们依此法不停迭代,最终可以得到下面的这幅图。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330039g.gif"></SMALL></P>
<P align=center><SMALL>结果</SMALL></P></DD> <H3 align=center><SMALL><SMALL>L-系统分形 </SMALL></SMALL></H3>
<P><SMALL> 相对来说,L-系统是比较新的制作分形的方法。这项技术是Aristrid Lindenmayer在1968提出来的,最早是用来研究植物生长的生物模型。看看下面的L-系统分形树的制作过程,就能明白为什么用L-系统来表述植物的生长模型。 <BR> <BR></SMALL>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330040a.gif"></SMALL></P>
<P align=center><SMALL>L-系统 树</SMALL></P>
<P><SMALL><BR> <BR> 尽管生成一个复杂的L-系统常常需要花费大量的时间,但是指定L-系统的公式往往非常简单。例如上图中的书,只需要下面的简单输入。 <BR> <BR> 公理:F <BR> <BR> 增长角: 20 <BR> <BR> 初始角: 90 <BR> <BR> 规则: F -> {{F}}[+F][-F] <BR> <BR> L-系统就是简单地让计算机制作海龟图,所谓的海龟图指的时只有几条简单的命令:直线、向左转、向右转等。 一些基础的命令是: <BR> <BR> F = 前进 <BR> <BR> - = 向右转 <BR> <BR> + = 向左转 <BR> <BR> [] = 把元素放入括号内,退回到上一步 <BR> <BR> {} = 增加直线的长度。 <BR> <BR> L-系统需要告诉计算机行走的道路,以让计算机明白是向前走、转弯还是其它什么动作。所以说,我们上面提到的公理和规则非常重要。我们使用字符串来告诉计算机怎么移动。首先,字符串里只有公理,所以以“F”开始。这只是作一条简单的直线。现在我们开始把规则应用到定理上。一个规则优两个部分组成:左边是一个字母,右边是几个字母。当你运用一条规则时,首先,观察字符串中右边的所有字母。然后用它们代替左边的那个字母。 <BR> <BR> 开始时的内容总是只有公理,就象下面所显示的那样。"F"告诉计算机向前移动一个单位。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330040c.gif"></SMALL></P>
<P align=center><SMALL>第0次迭代:F(公理)</SMALL></P>
<P><SMALL><BR> <BR> 现在,我们就以"F"开始,因为规则是 "F -> {{F}}[+F][-F]",所以,我们就以"{{F}}[+F][-F]"代替"F"。所以,"{{F}}[+F][-F]"就是第一次迭代的结果,如果我们按照海龟图的方式作出这个字符串,结果如下图所示: <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330040d.gif"></SMALL></P>
<P align=center><SMALL>第一次迭代</SMALL></P>
<P><SMALL><BR> <BR> 现在的这个图比单独的一条直线要有趣一些了,但是它看上去依然不象一棵树。让我们继续应用规则,把"{{F}}[+F][-F]" 种的每个"F"再用{{F}}[+F][-F]代替,这就变成了 "{{{{F}}[+F][-F]}}[+ {{F}}[+F][-F]][- {{F}}[+F][-F]]". 这回再采用制作海龟图的方法,就得出下面的这个图。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330040e.gif"></SMALL></P>
<P align=center><SMALL>第二次迭代</SMALL></P>
<P><SMALL><BR> <BR> 现在,我们可以按照这种基本的方法来继续制作分形树。很显然,迭代次数越多,得出的树就愈完美。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330040f.gif"></SMALL></P>
<P align=center><SMALL>第三次迭代</SMALL></P>
<P><SMALL><BR> <BR> 最初的一、两次迭代,可能看不出会是什么样的图形,但是随着迭代次数的增加,图形复杂度也渐渐增加,也就很容易看清L-系统所表示得分形模型。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330040g.gif"></SMALL></P>
<P align=center><SMALL>分形树的迭代过程</SMALL></P>
<P><SMALL><BR> <BR> 和迭代函数系统一样,如果你需要理解L-系统,就要自己动手去做。你可以从本站下载软件Fantastic Fractals 98,使用这个软件,你可以很轻松地制作出IFS(迭代函数系统)分形图形来。 <BR></SMALL>
<DL>
<DL></DL></DL></DD></DL> <STRONG> </STRONG>
<P align=center><SMALL>Julia集</SMALL></P>
<P><SMALL><BR> <BR> 有一类典型的混沌函数被称作“Julia集”,这是为了纪念Gaston Julia在这个领域的突出贡献。因为分形图形是无限精细的,所以你可以任意放大 Julia集的任意部分。 <BR> <BR></SMALL>
<DL>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041a.gif"></SMALL></P>
<P align=center><SMALL>Julia集的缩放</SMALL></P>
<P><SMALL><BR> <BR> 在Julia集中的每一点点要经过某个函数很多次的迭代,观察这个点的最终迭代结果是否无穷大,而Julia集就是这些点的边界,所以Julia集最终是由这个函数决定的。做出这些边界点的简单图形如下面的一幅黑白图形。但是,黑白图形缺少了彩色图形的魅力,所以人们在作Julia集时,总是加上一定的色彩,添加色彩的方法是依据Julia集上的点趋向无穷大时的速度快慢来确定颜色的深浅。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041b.gif"></SMALL></P>
<P align=center><SMALL>Julia集的黑白图形</SMALL></P>
<P><SMALL><BR> <BR> Julia集上的点趋向无穷大时的速度其实是计算这个点在迭代过程中,其值超过某个制定的较大上限数值时的迭代次数,而这些代代次数又映射为不同的颜色。下图中显示了颜色映射中,90中颜色中的前15个颜色。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041c.gif"></SMALL></P>
<P align=center><SMALL>颜色映射图</SMALL></P>
<P><SMALL><BR> <BR> 使用上面所说的颜色方案,就可以为Julia集添加上一定的颜色了。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041d.gif"></SMALL></P>
<P align=center><SMALL>彩色Julia集</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041e.gif"></SMALL></P>
<P align=center><SMALL>蓝色Julia集</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041f.gif"></SMALL></P>
<P align=center><SMALL>红色Julia集</SMALL></P>
<P><SMALL><BR> <BR> 那么怎么选择迭代函数呢?如果您已经具备了一定的代数知识(例如,知道复数的概念),就和我们一起进入下一讲的学习之中吧。 <BR> <BR> 其实,决定Julia集的迭代函数常常非常简单。例如,下图中的迭代函数是f(z) = z2 + (-0.20 + 0.75i)。在这个式子中,字母“i”表示复数的虚数部分。作图时,每一个复数都用图中的一点表示,实数部分的大小用水平距离表示,虚数部分的大小用垂直距离表示。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041g.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = z^2 + (-0.20 + 0.75i)</SMALL></P>
<P><SMALL><BR> <BR> 下面的几幅图都属于Julia集,只不过采用了不同的迭代函数。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041h.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = z^2 - i</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041i.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = z^2 - 0.9</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041j.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = z^2 + (0.33 + 0.4i)</SMALL></P>
<P><SMALL><BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041k.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = z^2 + (-0.7 + 0.3i)</SMALL></P>
<P><SMALL><BR> <BR> 我们可以使用许多种不同的函数来生成形态各异的Julia集,例如 f(z) = z3 + 2z2 + 6.8z + (0.4 - 0.67i) 以及 f(z) = 4.5cos(z)。下面的图就是利用函数f(z) = 2.98cos(z)迭代而成的。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041l.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = 2.98cos(z)</SMALL></P>
<P><SMALL><BR> <BR> 既然产生分形图形的函数是混沌的,那么,只要有轻微的改变,所产生的结果往往会大相径庭,例如下图中所使用的函数,仅仅在系数上比上图的减小0.01。 <BR> <BR></SMALL></P>
<DD align="center">
<P align=center><SMALL><IMG src="http://zhwzh.bj4hs.edu.cn/nonlinear/fxrm/kyfx/330041m.gif"></SMALL></P>
<P align=center><SMALL>Julia集 f(z) = 2.97cos(z)</SMALL></P></DD></DL> 入门的东西,非常好 图片都看不到阿,字也太小
页:
[1]