Hier haben wir eine interessante Real-Welt-Algorithmus-Anforderung, die Farben beinhaltet.Stabiler zufälliger Farbalgorithmus
N
Hübsche Farben: Um eine schöne Grafik zu zeichnen (das heißt: Tortendiagramm) brauchen wir einen zufälligen Satz vonN
Farben auszuwählen, die „anders genug“ sind und zusammen gut aussehen. Dies könnte erreicht werden, indem Helligkeit und Sättigung festgelegt werden und der Farbton in Schritten von360/N
schrittweise durchlaufen wird.- Stabile Farbzuweisung: gegeben Pie_1 mit Sektoren beschriftet ('A', 'B', 'C') und Pie_2 mit Sektoren beschriftet ('B', 'C', 'D'), wäre es nett wenn die Farbe der Sektoren B und C in Pie_1 und Pie_2 gleich ist. Dies hilft, Verwirrung zu vermeiden, wenn Sektoren im Laufe der Zeit entfernt oder dem Diagramm hinzugefügt werden. Das Etikett ist das einzige stabile Ding.
- Erlaubt hartcodierte Farben: Der Algorithmus sollte hartcodierte Label-> Farbbeziehungen als Eingabe zulassen, berechnet aber Farben (gemäß Regel 1 und 2) für die restlichen Beschriftungen.
Ich denke, dass dieser Algorithmus, auch wenn er ziemlich ad hoc aussieht, in mehr als einer Situation nützlich sein wird.
Irgendwelche Ideen?
Update: Eric ist richtig, dass es unmöglich ist, die Stabilität der Farben für jedes Etikett zu garantieren, wenn neue Etiketten erscheinen und verschwinden. Aber ich bin glücklich, wenn es "stabil genug" ist, d. H. Farbänderungen werden minimiert.
Ich dachte an so etwas wie:
- Jedes Etikett bekommt einen zufälligen Wert Farbton mit Hash (Label)% 360
- Um zu gewährleisten, dass die erzeugten Farbtöne genug verschieden sind, teilen wir den Farbton Kreis in einer festen Anzahl von Schritten (zB:
2*N
) und versuchen, die vorherigen Farbtonwerte zu den neuen differenzierten 'runden'. - Im Fall, dass verschiedene Labels den gleichen gerundeten Farbtonwert haben, brechen wir die Bindung irgendwie und verschieben den Punkt woanders hin.
Aber das lässt das Problem der hartcodierten Farben beiseite.
Wenn wir Farbe (Label) definieren: = hsb (Hash (Label)% 360, S, B) funktioniert, aber wie garantieren Sie, dass der Farbton unterschiedlich ist. Auf der anderen Seite, wenn Sie ein Farbrad verwenden, welches Label ist hashed und starten Sie das Farbrad und which Etiketten sind nur Anhänger? Danke für Ihre Antwort – Olmo
@Olmo: Siehe meine Bearbeitung. –
thaks viel Eric. Ich habe die Frage in das Community-Wiki geändert, damit ich mit etwas mehr Platz antworten kann – Olmo