我的分形畫廊

                                   我的分形畫廊
                         
[email protected]   2008.02.06

tag:迭代,分形,混沌,複雜性,吸引子

摘要:
  上大學的時候“不務正業”,整天整天的跑(泡)圖書館;"分形"這門有趣的數學幾何的
分支領域也是在這段時間裏接觸的;我利用分形的原理用程序繪製了很多好看的圖片;
以前上學時做的一些漂亮的分形圖片:
http://blog.csdn.net/housisong/Gallery/280093.aspx

正文:
 
A:進入分形
  中國的海岸線有多長?
  這看似一個簡單的問題,查資料或者搜索一下就能知道:“我國大陸海岸線長度爲1.8萬公里,居世
界第四位”.  然而,實際上這個海岸線長度數據是沒有任何意義的,我們來看看實際的海岸線
  (圖片從Google Earth截圖  每幅圖都在上副圖的基礎上放大其中的一個小區域)
  

 

 注意到問題沒有,海岸線的長度和測量時使用的“尺子”將成比例關係,你用的測量精度越高的尺子,
海岸線將越長!
  這裏有一幅很有趣的更加形象的圖片:
   
http://www.matrixkey.com.cn/images/fenxing1.gif
  海岸線在多個尺度下用一維數據是不可測量的! 很明顯,海岸線也肯定不是二維的;
它介於一維和二維之間的分數維! 我們需要一種新的幾何來定量描述這類物體;

B:混沌遊戲
  我們來做一個混沌遊戲,並親手繪製出我們的第一個分形圖;
  1.在紙上繪製3個點(距離大致相等),然後從3點中選定一個我們的當前點;
  2.隨機選擇3個頂點中的一個,繪製它與當前點之間的中間點,並把這個點作爲新的當前點;
  3.不斷的重複2,我們就能得到一幅有趣的圖片
  用計算機可以更快地完成這個過程,這樣就得到了下面這幅圖:
  

C:牛頓迭代
  在數值計算中,經常使用牛頓迭代法來求解方程的根;在現在CPU中,除法和開方指令一般都是使
用該方法來實現的(我以前的blog文章中也有其原理說明和圖示);
  對方程f(x)=0,設函數 g(x)= x - f(x) / f'(x) , 其中 f'(x) 爲函數f(x) 的導函數。
則函數 g(x) 就是求解方程根的牛頓迭代公式。(迭代的意思是: 把函數返回值作爲參數繼續帶入函數)
 對於選定的起始點x0,g(x)迭代大多都會收斂於f(x)=0的某個根,但也可能存在許多點,使 g(z)
迭代根本就不收斂,甚至可能出現混沌的狀態。 牛頓迭代法也適用於複數函數方程求根;
  這裏有一幅求解複數方程Z^3-1=0時形成的圖片;將複平面的任意一點作爲迭代初始值(x,y座標正
好作爲複數的實部和需部),不斷的迭代,大多數點都會跌入某個解,記下這時迭代經過的次數繪製成
不同的顏色,就可以得到如下的圖(包含放大的效果):
   
 這些“珍珠鏈”具有無窮的細節,可以在任何尺度任意放大。

D:Mandelbrot集合與Julia集合
    對於複數函數 f(z)=z^2+z0; 給定任意的z0,迭代可以得到序列:z0^2 + z0,
z0^4 + 2*z0^3 + z0^2 + z0,...... 我們把經過任意次迭代以後而不發散的z0定義爲
Mandelbrot集合,藉助於計算機,我們可以得到以下的圖像(屬於集合的點標記爲紅色):


  放大這個集合的邊緣將得到很多非常漂亮的圖片:  
 


   這是一個非常簡單的函數,但可以想象在沒有計算機以前,研究這個方程的不逃逸集合將是非常困難的
事情,很多東西沒有它看起來那麼簡單; 可以發現在M集周圍也有很多“小的M集”,它們和大的M集很相似;
已經證明M集是一個連通集,也就是說這些小M集是串在一起的! 1980年當 B. B. Mandelbrot第一次畫出它
的圖形以來,M集就被認爲是數學上最爲複雜的集合之一,它又是如此的美麗,吸引了大批的科學家和愛好者。
M集又被稱爲“數學恐龍”,它已成爲混沌、分形最爲重要的標誌之一。

  Julia集:複數函數 f(z)=z^2+zM, 其中zM爲常量,對平面上的一點z0進行迭代,經足夠多次迭代
後函數值不擴散,這類z0點組成的集合爲Julia集,對每一個特定的zM值都構成一個相應的Julia集;
 可以證明:M集是使Julia集爲連通的參數(zM)的集合。

  
                             (Julia集 zM=(-0.74543,0.11301) )

E:我的分形畫廊
  還有很多種分形生成方法和原理來繪製分形圖,請查找相關資料;
 上學的時候,幾乎翻遍了圖書館裏分形、混沌、複雜學等方面的書籍,編寫程序來繪製,並儘量繪製的
好看些;後來撥號上網以後(8塊錢一個小時)才發現,原來有很多人和我一樣,目標就是繪製“好看
的分形”,不拘泥於方程,而更在意“好看”,哈哈; 上網後我成了井底之蛙:D
 比如見這裏:http://www.fractalartcontests.com/2007/winners.php

 我以前繪製的很多圖片:  (還有很多圖片在多次的硬盤意外損壞中丟失)

 

(這幅圖片是使用精確的方程描述的,涉及到4個仿射變換函數,每個函數
都描述了局部和整體的一個關係式;用這些方程能夠繪製出這幅圖,同樣反
過來說,有了圖,也能求出其對應的仿射變換函數(用尺子就能測量出函數
的係數);有人在研究圖像的機器自動分形壓縮就是從這裏來的,這種方案
可以得到非常高的壓縮率)

(這幅圖片也是用仿射變換函數得到的 )

(叫"四點格式",是一種迭代的擬合方法;我把它繪製成一種動畫時截的圖)

(這幅圖片也是用仿射變換函數得到的 )

 

(牛頓迭代法解方程圖)

牛頓迭代法解方程結合Julia迭代


 最近做了一個簡單的屏保(牛頓迭代法解方程圖像) ,一些截圖:

 

 

 這裏有3幅超大的分形圖片(4000*3000),就不貼在文章中了(可以向我索要無損的PNG格式),鏈接如下:

 https://p-blog.csdn.net/images/p_blog_csdn_net/housisong/280093/o_xinkongj.jpg

 https://p-blog.csdn.net/images/p_blog_csdn_net/housisong/280093/o_kb3.JPG

  https://p-blog.csdn.net/images/p_blog_csdn_net/housisong/280093/o_m_gs345tb.jpg


 我的更多分形圖片: http://blog.csdn.net/housisong/Gallery/280093.aspx

  經常有人問我,爲什麼我做的圖片的顏色是連續變化的,其實很簡單,假設得
到的運算數據(比如迭代次數、逃逸距離等等)爲x,使用這樣的顏色函數:
 Color(x)=abs(f(x)%511-255);  其中f(x)函數一般是個連續函數(處處可導),那
麼Color(x)函數也將是一個連續函數,也可以用實力函數(推薦);很明顯顏色函數也可以使用其他很多滿足要求的
連續顏色映射函數;

關於編寫分形程序,可以關注我的文章<分形程序高級技巧入門教程>: http://blog.csdn.net/housisong/archive/2011/01/23/6159317.aspx 

文章生成的一幅圖:


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