3

我正在閱讀這個迷人的book中有關使用遺傳編程交互式演化圖像的章節。大多數功能集由簡單的算術和三角函數組成(真正可以在圖像上運行和返回圖像)。這些函數構成編碼我們圖像的解析樹的內部節點。樹的葉子或終端值是隨機數和x,y座標。使用Mandelbrot集合進行遺傳編程

有一個關於添加複平面的迭代函數的功能設定部分:

說遺傳學插入一個特定的Mandelbrot於 濃密的樹某處設置爲一個節點。該函數需要兩個參數:mandel(cReal,cImag),將它們視爲複平面中的實數和虛數座標。如果基因組 恰好提供了像素座標(x,y)和mandel()是根節點,那麼您將獲得熟悉的Mset。但是,很可能cReal和cImag本身就是整個函數分支的結果,許多座標爲x,y的實例散落在樹葉之間。輸入迭代循環,圍繞軌道 一會兒,並最終以一定距離到達Mset吸引器的距離,例如迭代次數。

我的問題是你如何做一個Mandelbrot集渲染爲,需要一個點的實部和虛座標複平面上作爲參數,並返回曼德爾布羅的渲染設置的功能?

回答

1

我不知道如果這實際上回答你的問題,但我的你只需引用文本的理解說,mandel功能只不過是另一種功能(如乘法,最小值,最大值,此外,等),可以出現在你的遺傳程序中。

mandel函數與乘法函數一樣,有兩個參數(in_1in_2)並返回單個值。而乘法函數只是返回in_1 * in_2,該曼德爾功能可能會做something like this

int mandel(int in_1, int in_2) { 
    x = 0 
    y = 0 
    iteration = 0 
    max_iteration = 1000 

    while(x*x + y*y <= (2*2) && iteration < max_iteration) { 
    xtemp = x*x - y*y + in_1 
    y = 2*x*y + in_2 
    x = xtemp 

    ++iteration 
    } 

    if(iteration == max_iteration) return 0 
    else return iteration 
} 

如果你的整個遺傳程序樹由什麼,但mandel功能與一個輸入作爲x和其它輸入爲y,然後反覆評估你的程序爲一堆不同的(x,y)值和保存結果將給你一個Mandelbrot集合的好照片。

當然,關於遺傳編程的巧妙之處在於輸入可能比xy更奇特。例如,如果一個輸入是x而另一個輸入是x + 2*y,結果會是什麼樣子?或者如果一個輸入是x而另一個是mandel(x,y)