當前位置:
首頁 > 知識 > 自繪Mandelbrot集合(四)

自繪Mandelbrot集合(四)

十、非黑即白


讓我們把Java版本中的(7)和(8)部分換成下面的代碼:


相應的JavaScript版本為

運行得到以下圖像

自繪Mandelbrot集合(四)



-0.743030 + 0.126433i @ 0.016110 /0.75

看上去我們的確繪出了某種正確的東西,因為右邊那個大蟲子頭很像前面我們在Mandelbrot集合上看到的那些。如果和本文開始的第三幅圖像比較區域坐標和圖像,就會發現這是同一塊地方。可為什麼我們現在畫出的這幅圖像里沒有那些漂亮的象海馬尾巴的螺旋,和類似孔雀尾羽上「眼睛」的圖案呢?多出來的是一堆雜亂的黑點。


先讓我們來複習一下Mandelbrot集合的定義和性質。對一個複數c,它屬於Mandelbrot集合,當且僅當下面這個遞歸定義得到的無窮複數列一直處於複平面上以原點為中心以2為半徑的圓內:


z= 0;


zn= zn-12+ c;


如果我們把zk寫成xk+yki這樣實部和虛部分開的形式,同樣也把c寫成cx+cyi的形式(cx和cy分別為c的實部和虛部),那麼上面的遞歸定義其實就是

x= 0, y= 0;


xn= xn-12- yn-12+ cx, yn= 2xn-1yn-1+ cy


複數cx+cyi屬於Mandelbrot集合,當且僅當對所有的自然數n,xn2+yn2< 22= 4。


於是很容易看出,上面給出程序的迭代計算部分實際上就是在實際計算這些xn和yn。由於Mandelbrot集合定義的簡單性,可稱為我們這個程序的核心演算法部分,只有區區二十來行:


當然我們不可能真的把整個無窮數列都算出來,所以我們必須定一個迭代次數的上限MAXITERNUMBER(可調參數,目前它的值為1000),如果算了這麼多次後,數列的各項還是沒能跑出逃逸半徑,也就是說xn2+yn2< ESCAPERADIUS(這裡ESCAPERADIUS也是一個可調參數,即逃逸半徑的平方,目前它的值是4),那麼我們就算這個點在Mandelbrot集合里了。所以上面這個迭代計算函數的意思就是:如果迭代若干次後數列出了逃逸半徑,返回首次出逃逸半徑時的迭代次數;如果迭代了MAXITERNUMBER次數列還是沒出逃逸半徑,那麼返回-1.0。而第(8)部分調色盤函數則將返回-1.0的那些點畫成黑色(顏色代碼為十六進位整數000000),其他情況畫成白色(顏色代碼為十六進位整數FFFFFF)。這是一種非黑即白的染色畫法,我們在畫面上看到的黑色部分就是Mandelbrot集合。

除去不可避免的浮點數計算精度問題,這樣的方法還有兩個無可奈何的缺點。首先它肯定會把一些不屬於Mandelbrot集合的點算在其內,因為有個迭代次數的上限。算1000次數列各項還在逃逸半徑內,保不準再算下去第1001次或者第10000次就出去了。我們當場就可以試一試,把「(1)可調參數」這部分中的迭代次數上限MAXITERNUMBER改成10000再運行,就得到了

自繪Mandelbrot集合(四)



-0.743030 + 0.126433i @ 0.016110 /0.75 迭代次數上限10000次

如果把MAXITERNUMBER改成100000,則有(允許的迭代次數多了,計算時間也必定相應增加。所以如果嘗試100000次的話,取決於你使用的電腦性能,也許要耐心等幾分鐘)

自繪Mandelbrot集合(四)



-0.743030 + 0.126433i @ 0.016110 /0.75 迭代次數上限100000次


可以看出,隨著迭代次數上限的增加,雜點越來越少。可問題是,用增加迭代次數上限的方法只能去除「假點」,那些海馬尾和孔雀羽眼不會因之而出現。


這就要談到上面方法的第二個缺點。在第九節中我們已經提到過,一個像素是被它的中心點代表的,它的顏色完全由這個像素所代表的正方形的中心點的性質決定。在本節「非黑即白」的畫法下,如果這個正方形里有許多Mandelbrot集合的點,但是不幸它的中心點不在其內,那麼這個像素也會被畫為純白。


在前面這幾幅黑白圖中,我們都能在畫面中心偏左上處看見一個小蟲子,它是Mandelbrot集合的一部分,看起來孤零零地遠離右側的大的黑色部分。但數學家們早已證明,整個Mandelbrot集合是連通的,也就是說,這個小蟲子是和整個Mandelbrot集合連為一個整體的。只是由於我們繪圖演算法的缺陷,才被畫成孤島的樣子。


如果你試驗了修改參數MAXITERNUMBER的結果,請將其改回1000次,我們暫時只需要不高的迭代次數上限,以節省計算時間。


(待續)


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科學公園 的精彩文章:

科學是最好的解毒劑——卡爾·薩根與《魔鬼出沒的世界》
如果石油用完了,我們拿什麼造塑料?(上)
病理科到底是個什麼樣的科室?
宗教扼殺了思想自由的空間
中國首艘航母下水,百年海軍揚帆起航!

TAG:科學公園 |

您可能感興趣

曝光 竟是iPad、iMac、MacBook Pro的集合體
Redis 集合(Set)
PentestPackage-Pentesting腳本集合
Walkers 集合
Bank Holiday折扣集合:Coach, Topshop, La Mer, 小CK等都有驚喜折扣
「冰港」the bigint 設計師集合品牌 開業首秀「icebreak
Chinese Word Vectors:目前最全的中文預訓練詞向量集合
Marc Jacobs 新品上市 | IT Bag 大集合
樂高新品:漫威全員集合《復仇者聯盟3:無限之戰》&Avengers:Infinity War 電影盒組
巴黎世家(Balenciaga )Triple S老爹鞋,開會啦,集合完畢,請檢閱
國內基本沒有貨的supreme聯名NikeLab Air Max 98各配色大集合!
華碩Zenfone 5系列全體集合!Zenfone 5 Max跑分現身
"IT Girl " Petra Collins 攝影作品集合,少女系的復古氣息大片賞析!
MongoDB 刪除集合
用Python 實現的機器人演算法示例集合——PythonRobotics
集合最強女Idol合唱《Wow Thing》28日公開
AJ4配色三巨頭集合,Air Jordan 4 "What the" 正面照來啦!
第七屆GaonMusicAwards頒獎禮眾星雲集 紅毯照大集合
用TensorFlow 實現的模型集合
三星或取消與Supreme Italia合作;江南布衣推出設計師品牌集合店;Superdry發布盈利預警