這裏有一個簡單的方法:
1.Generate a random integer.
2.Shift it 8 times to have 24 meaningful bits, store this integer value.
3.Use first 8 bits for R, second group of 8 bits for G,
and the remaining 8 bits for B value.
對於每一個新的隨機數,卻將它8次,如果沒有人用新的使用它匹配比較所有你之前存儲在其他整數值,爲新顏色(步驟3)。
人眼分化是一個有趣的話題,因爲感知閾值因人而異。爲了實現它將整數移位14次,得到R的前6位(填充兩個0再次得到8位),得到第二個6位爲G,最後6位爲B.如果你認爲6位不是好它,它減少5,4 ...
與每個通道4顯著位簡單運行: 我隨機整數是:
0101-1111-0000-1111-0000-1100-1101-0000
我轉移(也可以用乘法或模)它剩下20次:
0000-0000-0000-0000-0000-0101-1111-0000
存儲此值。
然後得到前4位爲對於G r第二4個比特和最後4位爲B:
R: 0101
G: 1111
B: 0000
墊它們使它們中的每8位。
R: 0101-0000
G: 1111-0000
B: 0000-0000
將這些用於您的顏色成分。
對於移位後的每個新隨機數,它將它與您存儲的整數值進行比較。如果不同,則將其存儲並用於顏色。
爲了保證相同的顏色永遠不會被使用兩次,只需將生成的顏色存儲到鏈表中(或者如果您有權訪問其中的一個,則使用散列圖)。繼續申請蘭特,直到你的號碼不在該組中。 – Lalaland
另一個考慮:是計算機還是人的「相同顏色」?如果第二個,那麼RGB數字之一的單個差異單位可能不足以使其與眼睛不同。 – Arkadiy
@Arkadiy:與人眼不同。不僅僅是一種顏色不同的顏色,不會被識別。 – Markus