Mandelbrot集合是在復(fù)平面組成分形的點(diǎn)的集合,用復(fù)二次多項(xiàng)式
來定義
其中c是一個(gè)復(fù)參數(shù)。對(duì)于每一個(gè)c,從
開始對(duì)fc(z)進(jìn)行迭代。
序列
的元素的模(復(fù)數(shù)具有模的概念)或者延伸到無窮大,或者只停留在有限半徑的圓盤內(nèi)。Mandelbrot集合就是使以上序列不延伸至無限大的所有c點(diǎn)的集合。
簡(jiǎn)單來說,對(duì)于迭代式:fc(z) = z2 + c ,Mandelbrot Set 迭代過程中的z值是固定的,是使上述迭代式始終在某一范圍內(nèi)而不發(fā)散于無窮大的c值的集
合;而Julia Set的迭代過程中c是固定的,上述是使上述迭代式始終在某一范圍內(nèi)而不發(fā)散于無窮大的z值的集合。
從數(shù)學(xué)上來講,Mandelbrot集合是一個(gè)復(fù)數(shù)的集合。一個(gè)給定的復(fù)數(shù)c或者屬于Mandelbrot集合M,或者不屬于。比如,取c = 1,那么這個(gè)序列就是(0, 1, 2, 5, 26, ...),顯然它的值會(huì)趨于無窮大;而如果取c = i,那么序列就是(0, i, -1+i, -i, -1+i, -i,...),它的值會(huì)一直停留在有限半徑的圓盤內(nèi)。
事實(shí)上,一個(gè)點(diǎn)屬于Mandelbrot集合當(dāng)且僅當(dāng)它對(duì)應(yīng)的序列(由上面的二項(xiàng)式定義)中的任何元素的模都不大于2。這里的2就是上面提到的“有限半徑”。
在計(jì)算機(jī)上繪制Mandelbrot集合
計(jì)算機(jī)的屏幕上的像素只有有限個(gè),而Mandelbrot集合中的點(diǎn)則有無限個(gè)。
觀察上面復(fù)平面的局部,Mandelbrot集合即黑色區(qū)域,實(shí)部從-2到1,虛部從-1到1,那么將兩個(gè)點(diǎn)(-2, 1)和(1, -1)作為一個(gè)矩形的左上角頂點(diǎn)和右下角頂點(diǎn),那么這個(gè)矩形就包含了整個(gè)Mandelbrot集合,該矩形的長(zhǎng)為3,寬為2。我們可以將這個(gè)矩形與屏幕上的區(qū)域進(jìn)行映射,也就是將屏幕上的一個(gè)像素映射為該矩形內(nèi)的一點(diǎn),如果該點(diǎn)屬于Mandelbrot集合,就將該像素著為黑色,這樣逐一對(duì)每個(gè)像素進(jìn)行判斷和著色,就可以模擬繪制Mandelbrot集合了。該矩形的長(zhǎng)寬比為3:2,我們?cè)谄聊簧峡梢匀?00 * 400的矩形區(qū)域。
完成映射后來考慮如何判斷一個(gè)點(diǎn)是否屬于該集合。其根據(jù)就是上面的結(jié)論“一個(gè)點(diǎn)屬于Mandelbrot集合當(dāng)且僅當(dāng)它對(duì)應(yīng)的序列(由上面的二項(xiàng)式定義)中的任何元素的模都不大于2”,由于序列的的元素有無窮多個(gè),我們只能取有限的迭代次數(shù)來模擬了,比如取100或1000次。
一個(gè)基本的Mandelbrot set的繪制<基于OpenGL>,沒有設(shè)置復(fù)雜的顏色

一個(gè)給點(diǎn)著色的Mandelbrot set的繪制<基于OpenGL>

一個(gè)給點(diǎn)著色的Mandelbrot set的繪制 三次 <基于OpenGL>
