天天看點

曼德勃羅特集分形

    和混沌密切相關的另一門學科是分形學。分形是由IBM公司的科學家曼德勃羅特在1975年提出的,作為計算機圖形學的一個分支,用分形的方法生成的圖像向人們展示了在簡單的數學模型中蘊涵的内在美、對稱性和複雜性。下面的第一幅圖被稱作曼德勃羅特集,其餘幾幅分别是對它的某個細節放大得到的。

    曼德勃羅特集的數學模型非常簡單。假設有複數Z和μ,用下式疊代計算:Z=Z2+μ,由于μ的取值不同,經過若幹次數疊代以後Z的幅值可能趨向無窮,也可能保持有界,曼德勃羅特集就是那些使Z保持有界的μ的集合,把μ在複平面上的分布作成圖像,就像上面示範的那樣具有極其複雜的結構。

下面的程式用TC2.0編寫, 假設螢幕的分辨率為640×480。

#include <graphics.h>

main(){

int nThre=100; /* 其中nThre代表設定的門限值,當疊代後Z的幅值的平方大于nThre則認為趨于無窮*/

int xCord,yCord,nColor,nTimes; /*xCord和yCord分别代表平面上的點的坐标位置,nColor代表作圖時所使用的顔色,nTimes表示疊代的次數 */

float reP,rePmin=-1.5,rePmax=0.75; /*reP表示由平面上一點所代表的μ值的實部,rePmax、rePmin分别代表μ值實部可取的最大值和最小值*/

float imP,imPmin=-1.5,imPmax=1.5; /*imP、imPmax和imPmin分别代表μ的虛部及其容許的最大值和最小值*/

float reZ,imZ,tmpReZ,deltImP,deltReP,absZ;

/*reZ和imZ分别代表Z值的實部和虛部,deltImP、deltReP表示每一個象素的代表的實部和虛部值的大小,absZ代表Z值的幅值 */

int GraphDriver=DETECT,GraphMode; /*初始化圖形顯示*/

initgraph(&GraphDriver,&GraphMode,“ ");

deltReP=(rePmax-rePmin)/640; /*計算螢幕上一個像素表*/

deltImP=(imPmax-imPmin)/480; /*和虛部值的大小示的 */

for(xCord=1;xCord<641;xCord++)

for (yCord=1;yCord<481;yCord++){

reP=rePmin+deltReP*xCord; /*計算螢幕上一點所*/

imP=imPmin+deltImP*yCord;/*代表的μ值大小*/

reZ=0; imZ=0;

for(nTimes=0;nTimes<160;nTimes++){

tmpReZ=reZ*reZ-imZ*imZ+reP; /*計算疊代後的Z*/

imZ=2*reZ*imZ+imP;/*值及其幅值大小*/

reZ=tmpReZ;absZ=reZ*reZ+imZ*imZ;

if (absZ>nThre){nColor=nTimes/10;break;}

/*假如幅值的平方大于門限值終止疊代*/

nColor=0;}

putpixel(xCord,yCord,nColor); }/*用指定的顔色作點*/

getch();

}

    上面的程式中,可以通過改變imPmin、imPmax以及rePmin與rePmax的值來對圖像的局部細節進行放大,進而可以觀察到更加精美複雜的圖像,領悟分形圖像的神韻。

    曼德勃羅特集是人們發現的最早的分形圖形之一,也是人們研究最多的分形圖形之一,今年的菲爾茲獎(數學界的最高獎)得主麥克馬蘭就是因為在曼德勃羅特集研究中的成績而獲此殊榮的。這些年關于分形的研究已經滲透到科學領域的各個學科,在計算機領域利用分形的方法來對自然景物進行逼真的模拟是一個很具挑戰性的研究方向。 

繼續閱讀