骰子作畫的演算法

2021-06-02 07:19:44 字數 983 閱讀 8763

程式設計師scott macdonald做了乙個很有趣的專案----骰子作畫。

他用黑底白點的骰子。

模擬出一張人像**。

把影象放大,就可以看得更清楚。

他一共用了2500多顆骰子。

最後的成品就是這樣。

任何一張都可以用骰子模擬出來,演算法非常簡單:將分成若干個區域,每個區域經過計算以後,用1-6之間的乙個整數表示,代表骰子的乙個面。這種將連續的量轉化成不連續的整數的演算法,屬於vector quantization(向量量化)的乙個應用。

具體來說,

第一步,將分割成16畫素x16畫素的小方塊。

for (int i=0; i < (pic_width/16); ++i) 

}

第二步,每個小方塊內共有256個畫素,將每個畫素點的灰度值,存入乙個陣列。

for (int k=0; k < patch.pixels.length; ++k) 

int rgb2gray(int argb)

第三步,計算該陣列的平均值,並用1-6之間的乙個整數來表示。

int dice_num = six_step_gray(mean(x));

int mean(int x)

m = m/x.length;

return int(m);

}  int six_step_gray(int x)

整數1,表示骰子朝上的一面有1個白點;整數2,表示有2個白點;以此類推。白點越少,表示這個區域越接近全黑;白點越多,表示越接近全白。根據白點值,將骰子依次放入,就能模擬出全圖。

這種演算法早在2023年就有人提出,當時用的是1~9個白點的多公尺諾骨牌。

如果區域劃分得越小,模擬圖的生成效果就越好。

此外,不用程式設計,使用photoshop也可以得到類似效果。

(完)

骰子作畫的演算法

程式設計師scott macdonald做了乙個很有趣的專案 骰子作畫。他用黑底白點的骰子。具體來說,第一步,將分割成16畫素x16畫素的小方塊。for int i 0 i pic width 16 i 整數1,表示骰子朝上的一面有1個白點 整數2,表示有2個白點 以此類推。白點越少,表示這個區域越...

Python實現骰子作畫演算法

在看到阮一峰的網路日誌中 骰子作畫的演算法 時,不經對其產生了濃厚的興趣,聯想到之前瀏覽到的程式設計師個性 注釋,發現裡面很多的注釋都可以用骰子作畫的 實現輸出,於是自己用python寫了乙份 翠花兒,上 from pil import image if name main img image.op...

使用骰子作畫

本文參考 阮一峰老師 骰子作畫的演算法 1計算灰度值方法 任何顏色都由紅 綠 藍三基色組成,假如原來某點的顏色為rgb r,g,b 那麼,我們可以通過下面幾種方法,將其轉換為灰度 1.浮點演算法 gray r 0.3 g 0.59 b 0.11 2.整數方法 gray r 30 g 59 b 11 ...