這是 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/ )介紹的取樣方式
留言列表