Ich möchte eine Farbe aus einer bestimmten Zeichenfolge erstellen. Die Zeichenfolge muss nicht mit der resultierenden Farbe in irgendeiner Form verknüpft sein, aber die gleiche Zeichenfolge sollte immer die gleiche Farbe ergeben.
Diese Frage ist nicht an eine bestimmte Programmiersprache gebunden, deshalb sollte die "Farbe" in einem sprachenunabhängigen Format wie RGB sein.
Es wäre gut, wenn der Algorithmus Farben in einem breiten Farbspektrum und nicht nur in gräulichen Farben erzeugt.
Perfekt wäre so etwas (C ++):
%Vor%Sie können einen beliebigen Hashing-Algorithmus verwenden, um einen Wert aus der Zeichenfolge zu erstellen, der für eine gegebene Zeichenfolge immer derselbe ist, und die Farbkomponenten daraus abrufen.
Die Methode GetHashCode
in .NET gibt zum Beispiel eine Ganzzahl zurück, so dass es einfach wäre, daraus einen RGB-Wert zu erstellen:
oder
%Vor%Ich werde versuchen, mit einem MD5 auf der Zeichenfolge:
%Vor%Was der Algorithmus macht, ist im Grunde folgendes: Er erhält die ersten drei Blöcke von 4 Bytes (dh 8 Zeichen) und gibt sie in einem Tupel modulo 256 zurück, so dass ihr Bereich in [0, 255]
Sie können die Godel-Nummer der Zeichenfolge berechnen. Grundsätzlich wäre es so (int) A [0] * 256 ^ n + (int) a [1] * 256 ^ (n-1) .... + (int) A [0]
Genau wie unser Nummernsystem, aber mit der Basis 256, weil es 256 mögliche Zeichenwerte gibt.
Als nächstes reduzieren Sie einfach um einen Faktor für den Bereich des Spektrums, dem Sie zuordnen möchten:
z.B. Angenommen, Sie wollen in den Bereich 0 ... 2000
Dann nimm einfach die Nummer, die du bekommst und dividiere durch (größte Zahl in deiner Reichweite) / 2000
Der Vorteil dieses Ansatzes besteht darin, dass Sie dadurch mehr Farben erhalten als nur RGB. Wenn Sie jedoch die Einfachheit der 3 Primärfarben haben möchten, können Sie stattdessen nur durch 3 teilen und verschiedene Bereiche nehmen, oder nehmen Sie mod 3.