使用Python實現MIIM方法繪製Julia set

Julia set是一種用簡單的表達式生成的複雜分型,一般的Julia set只需要使用的表達式反覆迭代便可以得到這樣的圖像。

雖然這個表達式很簡單,但是具體要怎麼使用這個表達式來生成Julia set的圖像呢,今天來介紹下Python的實現方式。

關於Julia set有很多種實現方式,這篇文章介紹的是反向迭代法(Inverse Iteration Method,簡稱IIM)的一種改進方案。IIM的原理就是,我們從一個已知存在於Julia set的點中開始反向迭代。正常來說我們是把表達式的結果帶入下一個表達式迭代,而反向迭代則是我們不斷地解x的值帶入下一次迭代。這種方法的好處就是,每一次迭代出來的點都一定是存在於Julia set中的。

IIM方法的性能比傳統的BSM高很多,但是存在一些問題,IIM方法對於特定的c值給出的圖像質量很差,因爲原理限制,它很難迭代到“內部”的點,看起來有些發虛。下圖是對比,左邊是IIM,右邊是質量較高的圖像。

而又因爲IIM方法每次迭代都會產生兩個新的根,這個根生成的過程就好像二叉樹一樣。導致IIM的迭代次數是呈指數上升的,我們沒辦法簡單通過增加迭代層數來獲得更好的圖像。如果迭代層數是N,那麼實際迭代次數就是2^N。這個代價實在太高了,我們必須找一個別的方法。

這裏就引入了我們主題中提到的MIIM,MIIM實際上就是Modified IIM。是對原有的IIM進行改進,解決了圖像質量問題的IIM。下面的文章來介紹MIIM的具體實現方法。

 

然後是一個把複數映射到平面上的工具函數。

MIIM算法主體:

MIIM維護一個矩陣,每當有點被迭代到,都會使對應的矩陣項值加1。但是這裏我們人爲設置了一個上限bailout。某個點被迭代的次數過多,對應矩陣點值超過了bailout,就會放棄從這個點繼續迭代。由於bailout的設置,程序最終會因爲沒有點可以繼續迭代停止,因此不需要設置迭代層數。

IIM的問題就在於迭代過程中訪問的重複點太多,而MIIM解決了這個問題。提供了一個性能和質量的平衡。

效果:

 

最後 歡迎通過微信公衆號聯繫我們。

微信公衆號:320科技工作室。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章