◆王海飞 马德峰
基于Gumowski-Mira公式的分形图实现算法的研究
◆王海飞 马德峰
分形是生活中常见的现象。分形的内容太多,只研究基于公式Gumowski-Mira的分形。通过介绍公式,然后用VC编程实现。通过这几个参数的改变,研究图形的变化,从而研究各个参数的物理意义。
分形;Gumowski-Mira公式;自相似
分形是日常生活中常见的现象,本文只研究基于公式Gumowski-Mira的分形。通过对公式中参数的多次改变,研究图形的变化,从而研究各个参数的物理意义。对于程序代码,本文会着重讲解其中的每个参数和变量对图形的影响,从而把其中的物理意义进行总结归纳,让大家对分形以及在这个公式基础上的分形有一个清楚、全新的认识!
分形的起源其实,分形的研究可以上溯到很久以前。大约100年前,分形的思想已经开始出现在数学领域。但是,就像其他的一些革命性的思想一样,分形的研究受到主流学术的谴责,被人们认为只是研究一些数学中的怪异现象。那时候著名的数学家Charles Hermit把分形称为“怪物”,这代表了绝大多数人的观点。
IBM公司的数学家Benoit B. Mandelbrot认真地研究了分形与自然的关系,他向人们展示了分形广泛地存在于身边,一些现象都能够用分形来进行准确的描述,他和他的同事们用分形来描述树和山等复杂事物。他还扩展了维数的概念,开创性地提出了分数维的概念,并创造了“fractal”一词。“fractal”就是人们所说的“分形”,也叫“分维”,台湾的学者则称之为“碎形”。为了褒奖Mandelbrot的突出贡献,人们把他称为“分形之父”[1]。
分形的概念Mandelbrot在解释“分形”一词时说:“我由拉丁语形容词fractus创造了‘分形’(fractal)一词。相应的拉丁语动词fragere意味着‘打破’和产生不规则的碎块。从而可见,除了‘破碎的’(如像碎片或曲折),fractus也应当具‘不规则’的含义,这两个含义都被保存在碎片(fragment)中。”[2]有许多数学结构是分形,如谢尔宾斯基三角形、科切雪花、皮亚诺曲线、曼德勃罗集、洛仑兹吸引子等。分形同样可以描述许多真实世界的对象,如云彩、山脉、湍流和海岸线等,当然它们不是单纯的分形形状。
Mandelbrot曾给出了一个分形的数学定义:一个几何对象,它的豪斯道夫维数严格大于其拓扑维数。这不仅有些抽象,而且也不是一个令人满意的定义,因为还有好多分形没有被该定义涵盖。后来他又给出一个比较通俗的定义:部分与整体以某种形式相似的图形。该定义仍然不能表达分形的全部意思,但会使很多初学者开始理解分形了,虽然还不能全部理解。
分形的几何特征分形是破碎的、不规则的,其几何性质十分丰富,可以说,到目前为止它的几何性质还没有完全被挖掘出来。这里只将分形最常见的一些性质描述给大家:1)分形是破碎的,局部不能可微的不规则图形;2)分形一般是自相似的,或是统计自相似的;3)分形有时也是自仿射的;4)分形的维数一般是分数的,但也有整数维数的分形;5)分形图形具有精细结构,即无论局部放大多少倍数,仍然具有复杂的结构。
图3.1是比较典型的分形图形,它们都具有自相似特性,但并不严格自相似,所以用“具有自相似”特性来定义分形已经有许多局限了,在人们的知识中应该继续扩展分形的含义。
图3.1
通过前面的介绍已经知道:分形最明显的特征是自相似性,其他的特征包括无限复杂、无限细致等。分形图形图3.1,它表现出自相似的特性。这里的自相似性体现在:每一个图都是由它的更小版本组成,而整个图形并没有重复。也就是说,这时自相似的实质应该是某一个部分在其他地方重复出现。
图3.2是真实拍摄的一张蕨类植物的图片,它也具有自相似特性。在这棵蕨类植物中,枝杈是整个植物的小版本,而枝杈的枝杈则是更小的版本。这种特性可以无限地持续下去。但是,它并不像计算机生成的分形图形那样严格地自相似,这大概是因为在成长过程中受到许多外界因素的影响。正是因为分形具有的自相似特性,才使分形如此重要并且具有实际应用意义。自然界中许多植物具有自相似特性。
图3.2
图3.3的风景图片是说明分形的另一很好的例子,这张美丽的图片是利用分形技术生成的。在生成自然真实的景物中,分形具有独特的优势,因为分形可以很好地构建自然景物的模型。其实,分形应用的领域很广,周围到处有分形应用的实例。如微生物中,菌落均呈现共同的形态特征:以母细胞为中心的环状层次结构。为了抽取隆起部分,科学家已经采用分形理论模型实现对菌落图像的纹理分割[3]。只要注意观察,就会注意到分形的应用非常广泛。
图3.3
Newton分形一个连续函数f(x),如果取其Taylor展开前两项作为它的近似,则有:
令f(x)=0,则函数f(x)的零点x可表示为:
于是有了求f(x)=0方程根的Newton迭代法:
当n趋向于无穷大,极限x(n)存在,则序列{X(n)}平方收敛到f(x)的零点。
把复数Z运用到(4.1)式上,得到如下公式:
并运用逃逸时间法就画得一幅Newton分形图。
Gumowski-Mira公式Gumowski-Mira公式作为下面的迭代法出现:
式中b用于控制轨道是膨胀还是收缩,如果b稍大于1,比如1.004,则轨道就会膨胀;反之若稍小于1,比如0.998,轨道就会收缩。在对下面这些函数作图时,大多数用的是1.005,一个经典的函数是:
Mira公式算法Mira公式算法[4](w代表函数,random是随机数,0<random<1):
计算轨道,在迭代100到20000次间,每次都画(x,y)点,当然也可加进颜色:
下面是根据Gumowski-Mira公式在VC环境下编写的部分程序代码[5-8]:
主要通过对不同参数值的设置所对应的图形的不同来研究各个参数(即参数n,b,a)的物理意义。
通过图6.1、图6.2的对比可以看到参数n决定着图像的清晰程度,因为参数n代表着循环的次数,即点的个数,所以n的值越大图像越清晰。
通过图6.3、图6.4和图6.5的对比可以看出,参数b是一个非常敏感的常数,通常非常接近于1.0。如果b有一个轻微增长,比如由0.99增大到0.999,轨迹会膨胀,或者螺旋向外至无限。如果b有一个轻微的减小,比如0.985,那么轨迹会收缩至奇异吸引子。
通过图6.6、图6.7、图6.8、图6.9可以看出,其实参数a也是一个很敏感的参数,a对图形的舒展有很大影响,随着a值的增大,图形周围的类似于翅膀的东西就会迅速收敛。
通过图6.10和图6.11可以看出,随着y乘的倍数缩小,图形会在纵轴即y轴方向变扁,也就是说这个系数控制着y轴方向舒展的程度。
通过图6.10、图6.12和图6.13可以看出,随着y轴偏移量的增大,图形会往下面移动,说明坐标y会随着偏移量的增大而增大,所以偏移量增大,图形会往下移动。
通过图6.10、图6.14和图6.15对比可以看出,随着x所乘倍数的变大,图形就会在x方向舒展;相反,图形就会在x方向上收敛。
通过图6.16、图6.17和图6.18可以看出,随着x坐标偏移量的增大,图形就会右移,即坐标x会随着偏移量的增大右移。
图6.1 n=10000
图6.2 n=1000000
图6.3 b=0.99
图6.4 b=0.999
图6.5 b=0.985
图6.6 a=0.001
图6.7 a=0.005
图6.8 a=0.05
图6.9 a=0.08
图6.10
图6.11
图6.12
图6.13
图6.14
图6.15
图6.16
图6.17
图6.18
分别通过调用函数“pDC->SetPixel(x*30+280,300-y*30,n)”(n为颜色值),对n分别设置为RGB(255,0,0)、RGB(0,0,255)、RGB(0,255,0),分别得到红色、蓝色、绿色的图像。
通过上面的研究可以看出,各个参数具有敏感特性,因此通过对参数的多次改变,研究图形的变化,从而研究各个参数的物理意义,以及函数中各个值的变化对整个图形的影响,从而研究总结原因。
[1]金以文,鲁世杰.分行几何原理及其应用[M].杭州∶浙江大学出版社,1998.
[2]Mandelbrot B B.大自然的分形几何[M].上海∶上海远东图书发行部,1998.
[3]王永铭,等.分形模型用于菌落图象的纹理分割[J].天津大学学报,1997(6).
[4]李水根.分形[M].北京∶高等教育出版社,2004.
[5]《电脑编程技巧与维护》杂志社.Visual C/C++图形图像与游戏编程典型实例解析[M].北京∶中国水利水电出版社,2006.
[6]勒济芳.Visual C++小波变换技术与工程实践[M].北京∶人民邮电出版社,2004.
[7]陆宗骐.C/C++图象处理编程[M].北京∶清华大学出版社,2005.
[8]张宏军,党留群,赵天巨.Visual C++ 6.0编程案例精解[M].北京∶电子工业出版社,2005.
G434
B
1671-489X(2014)17-0036-04
10.3969/j.issn.1671-489X.2014.17.036
作者:王海飞、马德峰,邹平县第一中学(256200)。