algorithm visualization color-space

algorithm - Generar colores únicos.



visualization color-space (6)

¿Cuál es tu espacio de muestra ... cuántos elementos estamos hablando?

Podrías construir una serie de triples RGB desde

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

Luego, aleatoriza tu lista y repite en ella. eso le daría 16 ^ 3 (4096) colores diferentes antes de un color repetido.

Quiero dibujar algunos datos en una textura: muchos elementos en una fila. No se crean en orden y pueden ser de diferentes tamaños (piense en un montón de memoria). Cada elemento de datos es un rectángulo pequeño y quiero poder distinguirlos, así que me gustaría que cada uno de ellos tenga un color único.

Ahora solo puedo usar rand () para generar valores RGB y espero que todos sean diferentes, pero sospecho que no tendré una buena distribución en el espacio RGB. ¿Hay una manera mejor que esta? Por ejemplo, ¿cuál es una buena manera de recorrer diferentes colores antes de que (casi) se repitan?

Los colores no tienen que coincidir con ningún dato en los artículos. Solo quiero poder ver muchos valores y ver que son diferentes, ya que son adyacentes.

Podría resolver algo, pero creo que esta es una pregunta interesante. :)


En general, RGB no es un gran espacio de color para hacer este tipo de cosas porque, para empezar, es perceptualmente no lineal. Esto significa que distancias iguales que se mueven entre trillizos RGB no se ven igual de diferentes a nuestros ojos.

Probablemente trabajaría en el espacio L*c*h* ( vea también ) el espacio, o espacio HSL , y solo generaría un espaciado uniforme en el tono. Estos espacios han sido diseñados para ser aproximadamente perceptualmente lineales.


Esto es muy similar al problema de los cuatro colores relacionados con los mapas para colorear, esto podría producir algunas soluciones interesantes para usted:

Teorema de cuatro colores


Google "delta e cie 2000"; La fórmula de diferencia de color es útil para determinar la distancia aparente (visual) entre 2 colores. (En un monitor; hay una fórmula diferente para los pigmentos). Funciona con colores en el espacio de laboratorio (apoyos a simón), pero aplica un cálculo perceptivo de la diferencia.

Descubrimos que un número alrededor de 1.5 era suficiente para garantizar colores visualmente distintos (es decir, puede notar la diferencia si están cerca uno del otro), pero si desea colores identificables (puede encontrar cualquier color en una leyenda) deberá hacerlo. subir eso.

En cuanto a la creación de un conjunto de colores ... Probablemente comenzaría en algún rincón del espacio del Laboratorio y caminaría alrededor de él utilizando un tamaño de paso que proporcione grandes diferencias visuales (nota: no es lineal, por lo que el tamaño de paso probablemente tenga que ser adaptable) y luego aleatorizar la lista.


Si solo necesita un conjunto de colores perceptualmente distintos (y no un algoritmo para generarlos), he creado una herramienta gratuita en mi sitio web que hace precisamente eso:
http://phrogz.net/css/distinct-colors.html

En lugar de utilizar simplemente un espaciado uniforme en el espacio RGB o HSV (que no está distribuido uniformemente con respecto a la percepción humana), la herramienta le permite generar una cuadrícula de valores en el espacio HSV y luego utiliza el estándar CMC(I:c) para el color. Distancia para tirar colores que son perceptualmente demasiado cerca uno del otro. (El control deslizante ''umbral'' en la segunda pestaña le permite controlar cuán visualmente deben ser los colores, mostrando los resultados en tiempo real).

Al final, puede ordenar su lista de colores generados por varios criterios, y luego ''mezclar'' uniformemente esa lista para garantizar que tenga valores visualmente distintos adyacentes entre sí en la lista. (Recomiendo un valor de ''Intercalación'' de aproximadamente 5).

A partir de este momento, la herramienta funciona bien con Chrome, Safari y (a través de un shim) Firefox; IE9 no admite controles deslizantes de entrada de rango HTML5, que la IU usa ampliamente para la exploración interactiva.


Usar el modelo de color RGB no es una buena manera de obtener una buena mezcla de colores. Es mejor usar otro modelo de color para generar su color, y luego convertir ese modelo de color a RGB.

Le sugiero el modelo de color HSV o HSL , en particular, desea cambiar el Hue .

Si desea X valores de color diferentes, varíelos de 0 a 360 con un tamaño de paso de 360 ​​dividido por X.