Fonction de création de roues chromatiques

C'est quelque chose que j'ai pseudo-résolu plusieurs fois et pour lequel je n'ai jamais vraiment trouvé de solution.

Le problème est de trouver un moyen de générer des couleurs N, qui soient aussi distinctes que possible où N est un paramètre.

请先 登录 后评论

1 réponses

helloandre

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.

请先 登录 后评论