close

這是 Buddhabrot 的一種特殊 render 法,據發明人 Melinda Green 的說法,靈感來自於哈伯望遠鏡合成影像的方式

這個配色我試了很久,感覺好像還沒達到完美。程式碼有點懶得整理,有需要的人再留言吧。


因為我實在太懶了,所以這裡就不提供完整的程式,僅說明概念,程式可以參考前一版的 Buddhabrot 去改。

最大的改變就是不再使用單一的trace,而是改成 R、G、B 各一,記憶體可能會有點大。然後在 update trace 的部分就變成

if (0 <= plotX && plotX < PLOT_WIDTH &&
    0 <= plotY && plotY < PLOT_HEIGHT) {
    if (RED_ITER_MIN <= i && i < RED_ITER_MAX)
        ++redTrace[plotX + plotY * PLOT_WIDTH];
    if (GREEN_ITER_MIN <= i && i < GREEN_ITER_MAX)
        ++greenTrace[plotX + plotY * PLOT_WIDTH];
    if (BLUE_ITER_MIN <= i && i < BLUE_ITER_MAX)
        ++blueTrace[plotX + plotY * PLOT_WIDTH];
}

這些常數的設定請自己去嘗試,上圖用的是
RED_ITER_MIN=24, RED_ITER_MAX=5000
GREEN_ITER_MIN=12, GREEN_ITER_MAX=500
BLUE_ITER_MIN=3, BLUE_ITER_MAX=50

接下來是決定顏色的部分,原則上數字越大亮度越大,因為我也沒有甚麼比較好的辦法,所以就用線性對應的方式。簡單的說,先針對各顏色決定最亮的值以及最暗的值,然後把超過最亮值的都當成255,反之則當成 0,其餘的就線性分佈在 0 至 255 之間。至於三原色合成應該不必多說。

我沒試過用 sigmoid 或 arctan 這類的曲線決定顏色,應該會更精緻,特別像 sine 應該可以做出很有趣的配色效果,不過我懶得試了。

如果覺得速度太慢,可以參考這裡( http://www.steckles.com/buddha/ )介紹的取樣方式

arrow
arrow
    全站熱搜

    novus 發表在 痞客邦 留言(1) 人氣()