Domanda

Voglio disegnare alcuni dati in una texture:molti elementi di seguito.Non vengono creati in ordine e possono avere dimensioni diverse (si pensi a un heap di memoria).Ogni elemento dati è un piccolo rettangolo e voglio essere in grado di distinguerli, quindi vorrei che ognuno di essi avesse un colore unico.

Ora potrei semplicemente usare rand() per generare valori RGB e sperare che siano tutti diversi, ma sospetto che non otterrò una buona distribuzione nello spazio RGB.Esiste un modo migliore di questo?Per esempio.qual è un buon modo per scorrere i diversi colori prima che (quasi) si ripetano?

I colori non devono corrispondere ai dati negli articoli.Voglio solo poter guardare tanti valori e vedere che sono diversi perché adiacenti.

Potrei capire qualcosa, ma penso che questa sia una domanda interessante.:)

È stato utile?

Soluzione

Utilizzando il modello di colore RGB non è un buon modo per ottenere un buon mix di colore. E 'meglio utilizzare un altro modello di colore per generare il vostro colore, e poi convertire da quel modello di colore RGB.

Vi suggerisco la HSV o HSL modello di colore invece, in particolare, si vuole variare la Hue .

Se volete valori di colore diverso X, li varia da 0 a 360, con un passo di 360 diviso per X.

Altri suggerimenti

In generale RGB non è un grande spazio di colore per fare questo genere di cose, perché è percettivamente non lineare, per cominciare. Ciò significa che distanze uguali spostati tra triplette RGB non guardare altrettanto diverso ai nostri occhi.

Probabilmente mi lavoro nel L * C * h * ( vedi anche ) lo spazio, oppure HSL spazio , e solo creare una spaziatura uniforme tonalità. Questi spazi sono stati progettati per essere di circa percettivamente lineare.

Che cosa è il vostro spazio campione ... quanti oggetti stiamo parlando.

Si potrebbe costruire una serie di RGB triple da

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

Poi randomizzare vostra lista e scorrere attraverso di essa. che darei 16 ^ 3 (4096) diversi colori prima di un colore ripetuto.

Google "delta e cie 2000";la formula della differenza di colore è utile per determinare la distanza apparente (visiva) tra 2 colori.(Su un monitor;c'è una formula diversa per i pigmenti.) Funziona sui colori nello spazio del laboratorio (sostegno a simon), ma applica un calcolo percettivo della differenza.

Abbiamo scoperto che un numero intorno a 1,5 era sufficiente per garantire visivamente distinto colori (es.puoi notare la differenza se sono vicini l'uno all'altro), ma se vuoi identificabile colori (puoi trovare qualsiasi colore in una legenda) dovrai aumentarlo.

Per quanto riguarda la creazione di una serie di colori...Probabilmente inizierei da qualche angolo dello spazio del laboratorio e lo aggirerei utilizzando una dimensione del passo che dia differenze visive sufficientemente grandi (nota:non è lineare, quindi la dimensione del passo dovrà probabilmente essere adattiva) e quindi randomizzare l'elenco.

Questo è molto simile al problema dei quattro colori relativi alle mappe di colorazione, questo potrebbe cedere alcune soluzioni interessanti per voi:

teorema dei quattro colori

Se avete solo bisogno di un insieme di colori percettivamente-distinti (e non un algoritmo per generare loro) ho creato uno strumento gratuito sul mio sito che fa proprio questo:
http://phrogz.net/css/distinct-colors.html

Invece di limitarsi a utilizzare la spaziatura uniforme in RGB o spazio HSV (che non sono distribuiti in modo uniforme rispetto alla percezione umana) lo strumento permette di generare una griglia di valori nello spazio HSV e quindi utilizza il CMC (I: c) di serie per la distanza di colore di buttare fuori i colori che sono percettivamente troppo vicini gli uni agli altro. (Il cursore 'soglia' sulla seconda scheda consente di controllare visivamente distinte come i colori devono essere, mostrando i risultati in tempo reale.)

Alla fine, è possibile ordinare l'elenco dei colori generati da vari criteri, e quindi in modo uniforme 'riordino' quella lista in modo che si sono garantiti per avere valori visivamente distinte adiacenti gli uni agli altri nella lista. (Mi raccomando un valore 'Interleave' di circa 5).

A partire da questa scrittura lo strumento funziona bene con Chrome, Safari, e (attraverso uno spessore) di Firefox; IE9 non supporta cursori ingresso gamma HTML5, che l'interfaccia utente utilizza ampiamente per esplorazione interattiva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top