《分形算法与程序设计——用Delphi实现》 作者:孙博文
出版:科学出版社
出版时间:2004年11月
开本:1/16
字数:495千字
印数:1-4000册
定价:40.00元
ISBN:7-03-014550-X
前 言
“事实上,无论是从美学的观点还是从科学的观点,许多人在第一次见到分形时都有新的感受”(曼德勃罗语)。确实如此,这句话不仅说出了笔者的亲身体验,也说出了许多分形爱好者的体验。
分形图的玄妙与优美让笔者为之倾心十几年,恐怕今后的岁月中也很难摆脱它的诱惑。它自然而优雅,纷繁而又有序,在绚丽的色彩变化背后透露着几分神秘。正如曼德勃罗所说,“在外行看来,分形艺术似乎是魔术。但不会有任何数学家疏于了解它的结构和意义”。笔者不是数学家,但同样对分形结构十分着迷,作为一名计算机图形学教师,笔者更关心的是这些玄妙的图形是如何构造出来的。事实上,几乎所有喜欢分形的人都曾提出过这样的问题,本书便是笔者对这一问题的部分解答。
本书图文并茂,浅显易懂。全书共分10章,第1章为分形简介,力图回答分形是什么的问题,主要介绍了分形的概念与定义,分形的特征与测量,分形的方法论意义及其与自然的关系,以及分形与计算机图形学之间的关系等;第2章介绍构造分形图的递归算法,以丰富的实例体现递归在分形图中的妙用;第3章为文法构图算法,主要介绍LS文法的构图原理与规则实现;第4章为迭代函数系统算法,主要介绍相似变换与仿射变换,及利用仿射变换的原理生成分形图的算法;第5章为逃逸时间算法,此算法所产生的丰富而美丽的图形是分形打动人心的秘密武器;第6章为分形显微镜;第7章为分形演化算法,重点介绍两个生成分形图的演化模型,一个是元胞自动机模型,另一个是扩散有限凝聚模型(DLA模型),你会看到复杂的分形结构是怎样通过简单的规则演化出来的;第8章为分形动画,以动画的形式表现分形的玄妙,同时阐述了分形动画的基本原理与算法;第9章为三维空间中的分形,将分形绘图投入到三维空间之中,重点介绍了OpenGL函数库的功能与用法,以及如何利用OpenGL函数库构造三维空间中的分形;第10章为分形自然景物模拟算法,利用分形构图方法,可以构造逼真的自然景象。
当然,分形图不只是用来欣赏的,它代表着几何学的一个新的研究方向,即对非规整几何对象的研究。这一任务是传统几何学所不能胜任的,所以诞生了分形几何学。因为大自然中存在着大量的非规整几何对象,而分形几何又能很好地表达和模拟这些自然景物,因此,分形几何学也被称为大自然的几何学。由于分形几何对象是不规整的,所以实现手绘几乎是不可能的(极其简单的分形图除外),因此,要想研究分形图,必须借助于计算机。同时利用分形算法所生成的自然景物,也已经或将在科幻影片和电子游戏中得到应用。
学习分形需要较深的数学基础,这使许多人望而却步。而本书恰恰是照顾到有不同知识背景的读者,有意回避分形的数学问题,将重点放在分形图的计算机算法构造和实现上,所以读者只要具备高中的数学知识,就可以看懂书中的所有算法,如果同时又具备了Delphi的编程能力,便可以看懂书中算法所携带的Delphi程序,所以通俗易读是本书的一大特点,这有利于初涉分形的读者阅读。另外,由于有了算法的源代码,可以调试和修改程序中的参数,从而产生许多意想不到的美丽图形,大大增加了读者的参与感和创新性,并满足了部分读者的实用需求。再有,本书的算法和程序设计是笔者多年来学习和研究的结果,书中的许多内容在其他的分形类书籍和计算机图形学书籍中很少出现,这将成为读者深入研究分形理论的一个很好的台阶。
本套书共4本,分别是“分形算法与程序设计——Visual Basic实现”、“分形算法与程序设计——Visual C++实现”、“分形算法与程序设计——Delphi实现”、“分形算法与程序设计——Java实现”,本书是其中的一本。本套书的写作特点是:所设计的分形算法基本相同,所举实例也大体类似,只是分别用各自的编程语言来实现这些实例,请读者参考阅读。
本书的问世,不仅仅是笔者努力的结果,还凝结了许多人的心血。书中的所有算法均在在哈尔滨理工大学的分形图形学讨论班中宣读,得到讨论班部分成员:孙百瑜、张海波、周烨、马强、赵衍鑫、龚宗耀、李文利、潘艺民等人的中肯的意见与建议,在此向他们表示深深的谢意。另外,科学出版社的编辑为此书的出版费尽心血,没有他们的大力协助和中肯建议,本书是不会以现在的形式呈现在读者面前的,在这里也要向他们表示感谢。最后还要感谢笔者的家人,由于他们的理解和支持,使笔者得以安心本书的写作,并完成它。
由于笔者水平有限,书中错误和疏漏在所难免,敬请读者批评指正。
孙博文
2004年3月31日于哈尔滨
目 录
第1章 分形简介 1
1.1 分形概念的提出与分形理论的建立 1
1.2 分形的几何特征 2
1.3 分形的测量 5
1.4 自然界中的分形 7
1.5 分形是一种方法论 9
1.6 分形与计算机图形学 10
第2章 分形图的递归算法 11
2.1 Cantor三分集的递归算法 12
2.2 Koch曲线的递归算法 15
2.3 Koch雪花的递归算法 19
2.4 Arboresent肺的递归算法 21
2.5 Sierpinski垫片的递归算法 24
2.6 Sierpinski地毯的递归算法 30
2.7 Hilbert-Peano曲线的递归算法 34
2.8 Hilbert-Peano笼的递归算法 41
2.9 C曲线的递归算法 47
2.10 分形树的递归算法 51
第3章 文法构图算法 63
3.1 LS文法 63
3.2 单一规则的LS文法生成 64
3.3 多规则的LS文法生成 73
3.4 随机LS文法 88
第4章 迭代函数系统算法 94
4.1 相似变换与仿射变换 94
4.2 Sierpinski垫片的IFS生成 95
4.3 拼贴与IFS码的确定 106
4.4 IFS植物形态实例 108
4.5 复平面上的IFS算法 115
第5章 逃逸时间算法 123
5.1 逃逸时间算法的基本思想 124
5.2 Sierpinski垫片的逃逸时间算法及程序设计 124
5.3 Julia集的逃逸时间算法及程序设计 127
5.4 基于牛顿迭代法的Julia集的逃逸时间算法 133
5.5 Mandelbrot集的逃逸时间算法及程序设计 137
第6章 分形显微镜 143
6.1 逃逸时间算法的放缩原理 143
6.2 Mandelbrot集的局部放大 146
6.3 Julia集的局部放大 154
6.4 牛顿迭代法的局部放大 160
6.5 作为Julia集字典的Mandelbrot集 162
第7章 分形演化算法 174
7.1 从逻辑运算谈起 174
7.2 一维元胞自动机 175
7.3 二维元胞自动机 180
7.4 分形演化的DLA模型 184
7.5 用DLA模型模拟植物的生长 188
7.6 不同初始条件的DLA生长形态 192
第8章 分形动画 206
8.1 摇曳的递归分形树 206
8.2 旋转的分形树 210
8.3 旋转的树枝 213
8.4 C曲线的变换 217
8.5 生长出来的Sierpinski垫片 219
8.6 摇摆的Sierpinski垫片 224
8.7 旋转万花筒 229
8.8 变形的芦苇 234
8.9 变形的分形树 239
8.10 王冠 243
8.11 收缩与伸展 248
8.12 连续变化的Julia集 253
第9章 三维空间中的分形 257
9.1 实现三维可视化的好帮手——OpenGL 257
9.2 三维空间中的Sierpinski地毯 269
9.3 三维空间中的Sierpinski金字塔 275
9.4 三维空间中的Sierpinski海绵 282
第10章 分形自然景物模拟算法 289
10.1 用随机中点位移法生成山 289
10.2 用分形插值算法生成云和山 299
参考文献 332