我想創建一個基於int變量創建獨特顏色的函數。問題是這些變量的範圍(從1到10000)。如何根據許多不同的整數創建多種顏色
所以我有一個數組有10 000個字段,每個字段都有自己的ID。現在我需要根據該ID設置每個字段的顏色;
void setColor(int ID); // set R G B
有什麼建議嗎?
我想創建一個基於int變量創建獨特顏色的函數。問題是這些變量的範圍(從1到10000)。如何根據許多不同的整數創建多種顏色
所以我有一個數組有10 000個字段,每個字段都有自己的ID。現在我需要根據該ID設置每個字段的顏色;
void setColor(int ID); // set R G B
有什麼建議嗎?
您可以省略表格並構建散列函數。 一個簡單的一個是:
rgb(unsigned x) {
b = x & 0xFF;
x >>= 8
g = x & 0xFF;
x >>= 8
r = x & 0xFF;
}
的分佈不是很好這裏:2^24 - 10000 = 16767216
一個備選哈希可以計算分佈= ID * 2^24/10000
事實上:'b =(x&0x1F)<< 3; x >> = 5;'等5 x 5 x 5位是32768色,非常足夠。 – MSalters
您有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
注意,這可以很容易地寫成'(ID-1)*(0x00ffffff/10000)',假設顏色編碼在一個32位寬的元組中,這是相當普遍的。 – datenwolf
RGB三元組是否應該是唯一的? – thokra
用於物件揀選?第二個想法 –
我想我可能只需要創建儘可能多的獨特的RGB三元組。不是每個人都必須是唯一的,但我仍然需要其中的很多人,主要觀點是讓他們可靠的ID變量 – user2803017