西西河

主题:【原创】千奇百怪话分形 -- 安德的游戏

共:💬55 🌺136
全看分页树展 · 主题 跟帖
家园 【原创】千奇百怪话分形——曼德尔布诺特集(下)

现在,我们要来讲一讲曼德尔布诺特集是怎么生成的了。

首先,我们建立一个复平面。如果不知道什么叫复平面的,那个,就不用继续看说明了,后面还有几张图看看,然后就算看完了。

对于复平面上面的任意一点C=x+y*i,和初值Z(0)=0,用以下的迭代公式进行迭代:Z(i+1)=Z(i)^2+C。所有使得序列Z收敛的点C,就构成了曼德尔布诺特集。

这个生成方法够简单的吧?这实际上就是分形的第五个特征,可以用简单的迭代方法生成。不过在实际操作的时候,还是有一些其他的问题需要考虑进去的。

在画出曼德尔布诺特集的时候,用人工的方法进行计算是不现实的,一般都是用计算机来进行迭代的运算。首先要确定一个范围,超出这个范围的点一定不收敛。我们知道在第一次迭代以后,可以得到Z(1)=C。那么如果对于序列中的任意一个Z(i),可以有以下不等式:||Z(i+1)||=||Z(i)^2+C||>=||Z(i)^2||-||C||=||Z(i)||^2-||C||。对于序列中的任意一个Z(i),如果||Z(i)||>=||C||(实际上对于i=1,上式一定成立),那么||Z(i)||^2-||C||>=||Z(i)||^2-||Z(i)||=||Z(i)||*(||Z(i)||-1)>= ||Z(i)||*(||C||-1)。那么对于任意||C||>2,||Z(i+1)||>= ||Z(i)||*(||C||-1)>||Z(i)||*(2-1)=||Z(i)||。所以如果||C||>2,那么序列一定发散。也就是说只要计算所有模小于等于2的点就够了。

接下来,因为复平面上面的点是无限稠密的,所以不可能计算所有的点,而且在一定的尺度上面,只要点足够稠密,对于更小的细节反正也画不出来,所以就不需要计算了。计算机做图都是以像素为单位的,所以如果要画1000x1000像素的图,给定实部和虚部各为正负2的范围的话,那需要计算的点就是C=((x-500)+(y-500)*i)/250,其中x和y分别取1到1000作为图像的横纵坐标。给定不同的偏移量,加在x和y上,就画出不同位置的图像。除以不同的除数,就给出不同的放大率(也就是尺度)。x和y取值的范围,就给出了图像的大小。

因为计算机判断收敛不可能计算无限序列,所以通常给定一个迭代次数,如果迭代相应的次数以后,结果的模还是不大于一个某个域值(比如说2),那么就认为是收敛的,否则就认为是发散的。习惯上曼德尔布诺特集内部的点画成黑色。如果发散的点画成白色,那就有了一个黑白两色的曼德尔布诺特集图像了。需要注意的是,图像放大的倍数越多,也就是越要看更精细的部分,相应的迭代次数就要越大,这样才能画出正确的图像。否则有些区域本来是发散的,也被画成在曼德尔布诺特集内部了。

如果想要一幅彩色的图像,只需要把发散的区域根据迭代到超过域值需要的迭代次数映射成相应的颜色就可以了。颜色映射的算法决定了画出来的图像是否好看,这个就需要自己摸索了。

另外,还有一种曼德尔布诺特集的推广,叫做“多布诺特集”(miltibrot set)。迭代的公式稍有不同,是Z(i+1)=Z(i)^d+C。

如果d=3,给出的就是下面的这个图形。

点看全图

外链图片需谨慎,可能会被源头改

如果d=4,给出的就是下面的这个图形。

点看全图

外链图片需谨慎,可能会被源头改

到这里,曼德尔布诺特集的部分就算是基本讲完了。跟曼德尔布诺特集相关联的还有一种朱丽亚集(Julia set),不过那个比较复杂,就不放在这里讲了。

关键词(Tags): #分形#曼德尔布诺特集元宝推荐:海天,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河