2013-09-27 14 views
0

我想創建一個基於int變量創建獨特顏色的函數。問題是這些變量的範圍(從1到10000)。如何根據許多不同的整數創建多種顏色

所以我有一個數組有10 000個字段,每個字段都有自己的ID。現在我需要根據該ID設置每個字段的顏色;

void setColor(int ID); // set R G B 

有什麼建議嗎?

+0

RGB三元組是否應該是唯一的? – thokra

+0

用於物件揀選?第二個想法 –

+0

我想我可能只需要創建儘可能多的獨特的RGB三元組。不是每個人都必須是唯一的,但我仍然需要其中的很多人,主要觀點是讓他們可靠的ID變量 – user2803017

回答

0

您可以省略表格並構建散列函數。 一個簡單的一個是:

rgb(unsigned x) { 
    b = x & 0xFF; 
    x >>= 8 
    g = x & 0xFF; 
    x >>= 8 
    r = x & 0xFF; 
} 

的分佈不是很好這裏:2^24 - 10000 = 16767216

一個備選哈希可以計算分佈= ID * 2^24/10000

+0

事實上:'b =(x&0x1F)<< 3; x >> = 5;'等5 x 5 x 5位是32768色,非常足夠。 – MSalters

4

您有10,000個可能的輸入選項,而256 x 256 x 256 = 1600萬個輸出選項。 假設你想要同等地改變RGB值,你可以最大限度地使用R,G,B的21個差異值,因爲那將產生21.5^3〜10000.

所以你需要邁出一步256/21〜 12爲您的目的服務。

所以,基本上我的觀點是:

int  RGB value 
1   0,0,0 
2   0,0,12 
3   0,0,24 
. 
.. 
22  0,0,253 
23  0,12,0 
. 
. 
. 
10000  255,255,255 
+0

注意,這可以很容易地寫成'(ID-1)*(0x00ffffff/10000)',假設顏色編碼在一個32位寬的元組中,這是相當普遍的。 – datenwolf

0

最簡單的方法是簡單地將ID直接轉換成RGB值。但是,它肯定不會產生視覺上獨特的顏色範圍。

+0

是的,這就是我一直在想的,但我真的不知道該怎麼做。 – user2803017