Frage

Ich möchte einige Daten in eine Textur zeichnen: viele Elemente in einer Reihe. Sie sind nicht geschaffen, um, und sie können alle unterschiedlich groß sein (denken Sie an einen Speicherhaufen). Jedes Datenelement ist ein kleines Rechteck, und ich möchte, dass sie in der Lage sein auseinander zu unterscheiden, also würde ich jeder von ihnen gerne eine einzigartige Farbe haben.

Jetzt konnte ich rand gerade () RGB-Werte zu generieren und zu hoffen, dass sie alle verschieden sind, aber ich vermute, ich werde nicht eine gute Verteilung im RGB-Raum erhalten. Gibt es einen besseren Weg, als das? Z.B. Was ist ein guter Weg, durch verschiedene Farben des Radfahrens, bevor sie (fast) wiederholen?

Die Farben müssen nicht mit irgendwelchen Daten in den Einzelteilen entsprechen. Ich möchte nur in der Lage sein, bei vielen Werten zu schauen und sehen, dass sie anders sind, als sie benachbart sind.

Ich könnte etwas herausfinden, aber ich denke, das ist eine interessante Frage. :)

War es hilfreich?

Lösung

Mit dem RGB-Farbmodell ist kein guter Weg, um eine gute Farbmischung zu erhalten. Es ist besser, ein anderes Farbmodell zu verwenden, um Ihre Farbe zu erzeugen, und dann konvertiert von diesem Farbmodell in RGB.

Ich schlage vor, Sie die HSV oder HSL-Farbmodell statt, insbesondere Sie variieren möchten die Hue .

Wenn Sie X wollen unterschiedliche Farbwerte, variieren sie von 0 bis 360 mit einer Schrittweite von 360 durch X geteilt.

Andere Tipps

In der Regel RGB ist kein großer Farbraum für diese Art von Dingen zu tun, weil es wahrnehmungsnichtlinearen ist, für den Anfang. Dies bedeutet, dass gleiche Abstände zwischen RGB-Triplets bewegt sehen nicht gleich anders in unseren Augen.

würde ich wahrscheinlich in der noreferrer"> L * c * h * Raum rel="nofollow siehe auch) Raum oder HSL Raum und erzeugt nur einen gleichmäßigen Abstand in Farbton. Diese Räume wurden entwickelt, etwa wahrnehmungs linear sein.

Was ist Ihr Probenraum ... wie viele Artikel sprechen wir.

Sie können eine Reihe von RGB-Triples aus

aufbauen
for(int r = 0; r < 255; r = r+16)
   for(int g = 0; g < 255; g = g+16)
      for(int b = 0; b < 255; b = b+16)
           // take r, g, b and add it to a list

randomise dann Ihre Liste und durchlaufen sie. dass würden Sie 16 ^ 3 (4096) verschiedene Farben vor einer wiederholten Farbe.

Google "Delta e cie 2000"; die Farbdifferenzformel zur Bestimmung scheinbaren (visuell) Abstand zwischen 2 Farben nützlich. . (Auf einem Monitor;. Es gibt eine andere Formel für Pigmente) Es arbeitet auf Farben im Lab-Raum (Requisiten simon), gilt aber eine Wahrnehmungs Berechnung der Differenz

Wir fanden, dass eine Zahl um 1,5 ausreichte, visuell zu gewährleisten verschieden Farben (dh Sie den Unterschied erkennen können, wenn sie in der Nähe von einander sind), aber wenn Sie möchten erkennbar Farben (Sie können jede Farbe in einer Legende finden) Sie werden feststellen, dass bis stoßen müssen.

In Bezug auf eine Reihe von Farben ... und ich würde wahrscheinlich an irgendeiner Ecke von Lab-Raum beginnen, und gehe um eine Schrittweite, die groß genug visuelle Unterschiede (Note gibt: es ist nicht linear, so Schrittgröße wird wahrscheinlich sein müssen adaptiv) und dann die Liste randomisieren.

Dies ist sehr ähnlich wie die Vier-Farben-Problem Färbung Karten beziehen, könnte dies einige interessante Lösungen für Sie ergeben:

Vierfarbensatz

Wenn Sie nur einen Satz von wahrnehmungs verschiedenen Farben (und nicht ein Algorithmus, sie zu erzeugen) Ich habe ein kostenloses Tool auf meiner Website erstellt, das tut genau das:
http://phrogz.net/css/distinct-colors.html

Statt nur mit sogar in RGB oder HSV-Raum Abstand (die nicht gleichmäßig in Bezug auf die menschliche Wahrnehmung verteilt sind) das Werkzeug ermöglicht es Ihnen, ein Gitter von Werten in HSV-Raum zu erzeugen und verwendet dann die CMC (I: c): Standard für Farbabstand Farben zu werfen, die jeden wahrnehmungs zu nahe andere. (Die ‚Schwelle‘ Schieberegler auf der zweiten Registerkarte können Sie steuern, wie visuell verschieden die Farben sein müssen, können Sie die Ergebnisse in Echtzeit zeigt.)

Am Ende können Sie Ihre Liste der erzeugten Farben nach verschiedenen Kriterien sortieren und dann gleichmäßig ‚Shuffle‘ diese Liste, so dass Sie garantiert visuell unterschiedliche Werte haben, die benachbart zueinander in der Liste. (Ich empfehle einen 'Interleave' Wert von etwa 5.)

Wie dies das Werkzeug Schreiben funktioniert gut mit Chrome, Safari und (über eine Shim) Firefox; IE9 nicht HTML5 Bereichseingang Schieber unterstützen, die die Benutzeroberfläche in großem Umfang für interaktive Exploration verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top