J'ai lu quelque part que l'œil humain ne peut pas faire la distinction entre moins de 4 valeurs. donc c'est quelque chose à garder à l'esprit. L'algorithme suivant ne compense pas cela.
Je ne suis pas sûr que ce soit exactement ce que vous voulez, mais c'est une façon de générer aléatoirement des valeurs de couleur non répétitives :
(attention, pseudo-code incohérent à venir)
//colors entered as 0-255 [R, G, B]
colors = []; //holds final colors to be used
rand = new Random();
//assumes n is less than 16,777,216
randomGen(int n){
while (len(colors) < n){
//generate a random number between 0,255 for each color
newRed = rand.next(256);
newGreen = rand.next(256);
newBlue = rand.next(256);
temp = [newRed, newGreen, newBlue];
//only adds new colors to the array
if temp not in colors {
colors.append(temp);
}
}
}
Une façon d'optimiser cela pour une meilleure visibilité serait de comparer la distance entre chaque nouvelle couleur et toutes les couleurs du tableau :
for item in color{
itemSq = (item[0]^2 + item[1]^2 + item[2]^2])^(.5);
tempSq = (temp[0]^2 + temp[1]^2 + temp[2]^2])^(.5);
dist = itemSq - tempSq;
dist = abs(dist);
}
//NUMBER can be your chosen distance apart.
if dist < NUMBER and temp not in colors {
colors.append(temp);
}
Mais cette approche ralentirait considérablement votre algorithme.
Une autre façon serait de supprimer le caractère aléatoire et de parcourir systématiquement toutes les 4 valeurs et d'ajouter une couleur à un tableau dans l'exemple ci-dessus.