N verschiedene RGB-Farben finden

9

Ich versuche, grafisch ein Diagramm mit N Zeilen darzustellen, und ich versuche eine Möglichkeit zu finden, dynamisch verschiedene Farben basierend auf der Anzahl der Zeilen, die ich habe, zuzuweisen. Die Werte im RGB reichen von 0 bis 1. Ich kann nicht weiß verwenden, weil der Hintergrund weiß ist. Ich fand es einfach für N & lt; 7:

%Vor%

Das gibt mir schwarz, blau, grün, cyan, rot, magenta, gelb. Aber danach wird Weiß und dann Schleife verwendet. Kennt jemand eine gute Möglichkeit, RGB-Werte für einen Index zuzuweisen? Ich habe auch einen Opazitätswert, mit dem ich spielen kann.

    
Stuart 26.01.2010, 19:38
quelle

3 Antworten

4

Meine bevorzugte Methode hierfür ist, n gleichmäßig beabstandete Punkte entlang des Farbkreises zu finden.

Wir stellen das Farbrad als einen Bereich von Werten zwischen 0 und 360 dar. Daher werden die Werte, die wir verwenden werden, 360 / n * 0 , 360 / n * 1 , ..., 360 / n * (n - 1) sein. Dabei haben wir den Farbton für jede unserer Farben definiert. Wir können jede dieser Farben als Farbton-Sättigungs-Wert (HSV) -Farben beschreiben, indem Sie die Sättigung auf 1 und die Helligkeit auf 1 setzen.

(Eine höhere Sättigung bedeutet, dass die Farbe "reicher" ist; eine niedrigere Sättigung bedeutet, dass die Farbe näher an Grau ist. Eine höhere Helligkeit bedeutet, dass die Farbe "heller" ist; eine geringere Helligkeit bedeutet, dass die Farbe "dunkler" ist.)

Jetzt gibt uns eine einfache Berechnung die RGB-Werte jeder dieser Farben.

Ссылка

Beachten Sie, dass die angegebenen Gleichungen vereinfacht werden können:

  • p = v * (1 - s) = 1 * (1 - 1) = 1 * 0 = 0
  • q = v * (1 - f * s) = 1 * (1 - f * 1) = 1 - f
  • t = v * (1 - (1 - f) * s) = 1 * (1 - (1 - f) * 1) = 1 - (1 - f) = 1 - 1 + f = f

Pseudocode-ish-Implementierung in Python

Hinweis: Dies ist absichtlich eine schrecklich ineffiziente Implementierung. Der Punkt dieses Beispiels in Python ist im Wesentlichen so, dass ich ausführbaren Pseudocode geben kann.

%Vor%

Präzise Implementierung in Python

%Vor%     
Wesley 26.01.2010, 20:00
quelle
0
%Vor%     
quelle
0

Ich habe diesen Code einmal geschrieben, um genau das Problem zu lösen, das Sie beschreiben (der Hintergrund war auch weiß). Es ist die gleiche Idee wie deine, nur verallgemeinert. Es sollte einfach sein, sich von OCaml an Ihre Sprache anzupassen.

Verwendung

Sie müssen der Funktion nicht sagen, wie viele Farben Sie benötigen. Rufen Sie die Funktion mit 1, 2, ... auf, um Farbnummer 1, Nummer 2, ... zu erhalten. Die Farben aus kleinen Zahlen sind weit auseinander, die letzteren Farben kommen natürlich näher und näher zueinander.

Code

lsl ist "logische Verschiebung links", lsr "logische Verschiebung rechts" und ! bedeutet einfach "Zugriff auf eine Referenz". In OCaml werden RGB-Farben in einer einzigen Ganzzahl mit einem Byte pro Farbe dargestellt.

%Vor%     
Pascal Cuoq 26.01.2010 19:45
quelle

Tags und Links