Di n = 100; ¿Cómo se genera 100 colores visualmente distintas? Es esto matemáticamente posible?
¿Cómo generar n diferentes colores para cualquier número natural n?
Que desea convertir a HSL y luego iterar a través de los valores del tono (H), manteniendo constantes los otros 2 valores.
Para cada valor que convertir de nuevo a RGB HSL .
Ver mis respuestas aquí y aquí .
Si su N es muy grande, por lo que los colores no son visualmente distinto que podría en ese punto reiterar sobre la totalidad de las mismas tonalidades y cambiar los otros componentes para variar la saturación o luminosidad. Así que, básicamente, usted podría tener un número máximo de valores de tono de usar, y una vez que se golpea se puede empezar de nuevo con una saturación o la luminosidad diferente.
100 es una gran cantidad de colores, pero que podría ser capaz de hacerlo mediante la distribución de ellos como poco como sea posible en el HSB o espacio HSL; haciéndolo en RGB es probablemente difícil.
Por ejemplo, es posible que decida utilizar 10 tonalidades diferentes, 4 diferentes niveles de saturación, y 3 ajustes de brillo diferentes, eso le dará hasta 120 colores. Tendrá que tomar los valores de saturación y brillo con cuidado; los ojos humanos son sensores complicados y confusos. Si usted trata el espacio de color como un cono, es probable que desee un número diferente de matices en cada nivel de luminosidad / saturación.
Aquí hay un enlace a la Wikipedia entrada en HSB .
Editar:
No tengo ninguna experiencia en esta área y mis habilidades matemáticas son bastante regulares. Pero tengo la opinión de que la solución a este problema es más complejo e interesante que muchas respuestas aquí sugieren, ya que traté de hacer algo similar recientemente y no encontrar una solución.
Diferencia de color
La percepción del color es subjetivo por supuesto, pero existe un acuerdo importante entre los seres humanos. Por ejemplo, todos estamos de acuerdo que el rojo, el verde y el azul son colores muy diferentes, e incluso las personas daltónicas de acuerdo en que en blanco y negro son muy diferentes.
RGB
La representación más común del color en sistemas informáticos es el vector (r, g, b) lo que sugiere una función de distancia simple como

Deja para establecer el rango de r , g y b a [0, 1] y ver cómo funciona esto:
- Red (1, 0, 0) y rojo (1, 0, 0) con la distancia de 0 , lo que debería ser obvio
- Red (1, 0, 0) y amarillo (1, 1, 0) tiene la distancia de 1 , que es menor que la distancia de
- Red (1, 0, 0) y azul (0, 0, 1) que es sqrt (2) , que es plausible
Hasta aquí todo bien. El problema sin embargo es que el azul y el rojo tienen la misma distancia 1 de negro (0, 0, 0) , pero cuando se mira en la imagen, esto no parece ser cierto:

También amarillo (1, 1, 0) y magenta (1, 0, 1) ambos tienen la misma distancia 1 desde el blanco (1, 1, 1) , lo que no parece tener sentido, ya sea:

HSL y HSV
Creo que es seguro asumir que las métricas analógicas para los esquemas de color HSL y HSV tienen los mismos problemas. Estos esquemas de color no están diseñados para comparar el color.
CIEDE2000
Afortunadamente, hay científicos ya tratando de encontrar una buena manera de comparar colores. Ellos vinieron con algunos métodos elaborados, el último de los cuales CIEDE2000

(la fórmula completa se describe en el artículo es enorme )
Esta medida toma en consideración la percepción humana, al igual que el hecho de que parece que somos incapaces de discernir tonos de azul muy bien. Así que diría que usamos esto como nuestra función de la diferencia de color.
El algoritmo Recogiendo color
solución ingenua
Algunas respuestas sugieren el siguiente algoritmo
colors = []
for n in range(n):
success=False
while not success:
new_color = random_color()
for color in colors:
if distance(color, new_color)>far_enough:
colors.append(new_color)
success = True
break
Este algoritmo tiene algunos problemas:
La separación de los colores no es óptima. Si imaginamos los colores a ser como números en una línea, tres números serían separados de manera óptima la siguiente manera:
| A ----- ----- b c |
Embalaje una un número adicional de allí sin mover a, b, yc es claramente peor que la realineación de todos los colores.
El algoritmo no está garantizado para terminar . ¿Qué pasa si no hay un color que es lo suficientemente formar los colores existentes en la lista? El bucle continuará para siempre
solución adecuada
Bueno .. no tengo uno.
No es una respuesta a su pregunta, pero, si n tiene un valor máximo y su aplicación lo permite, se podría utilizar una lista predefinida de colores como esto:
http://en.wikipedia.org/wiki/List_of_colors
Una de las ventajas es que se puede mostrar un nombre de color humanamente legible, en un texto de ayuda para las personas con ceguera al color.
Para empezar, no utilice el espacio RGB; es difícil encontrar un espacio de color peor para este problema. (Dependiendo de si usted está usando los colores para la visualización o impresión de que o bien tienen un gran número de colores indistinguibles cerca de negro o cerca de blanco.)
Si utiliza el espacio Lab, existen modelos de color CIE percepción (1996? 2000 y CIE) para medir la cercanía visual de colores (para la impresión y visualización, respectivamente).
No es decir que si vas a calcular los colores de una vez y almacenar el resultado, o si necesitan volver a calcular sobre la marcha (y en ese caso, si tiene que ser determinista o no). Obviamente, cualquier discusión sobre la mejor manera de generar el conjunto dependerá de eso.
Aunque Yo sugeriría que uniformemente dividiendo los ejes del espacio de color (decir en 8) y el uso de aquellos como puntos iniciales sería mucho más eficiente que cualquier proceso aleatorio. Ciertamente, sólo tiene que comparar cualquier punto de sus vecinos (y sólo si ya están en el conjunto), lo que le ahorrará una gran cantidad de comparaciones.
Sí. Definir distinta es un producto de diferir a un espacio de color a continuación, cuando decimos colores distintos al máximo lo que quiero decir es que son colores tan lejos de todos los otros colores como sea posible. Pero dado que el espacio de color no cambia la respuesta no va a cambiar. E implementar algo que mejor encaja con ojos humanos y cómo el ojo humano percibe el color CIE-Lab como la distancia de color DE2000 hace que rehacer todos los cálculos duro, pero hace una lista estática fácil. Aquí es 128 entradas.
private static final String[] indexcolors = new String[]{
"#000000", "#FFFF00", "#1CE6FF", "#FF34FF", "#FF4A46", "#008941", "#006FA6", "#A30059",
"#FFDBE5", "#7A4900", "#0000A6", "#63FFAC", "#B79762", "#004D43", "#8FB0FF", "#997D87",
"#5A0007", "#809693", "#FEFFE6", "#1B4400", "#4FC601", "#3B5DFF", "#4A3B53", "#FF2F80",
"#61615A", "#BA0900", "#6B7900", "#00C2A0", "#FFAA92", "#FF90C9", "#B903AA", "#D16100",
"#DDEFFF", "#000035", "#7B4F4B", "#A1C299", "#300018", "#0AA6D8", "#013349", "#00846F",
"#372101", "#FFB500", "#C2FFED", "#A079BF", "#CC0744", "#C0B9B2", "#C2FF99", "#001E09",
"#00489C", "#6F0062", "#0CBD66", "#EEC3FF", "#456D75", "#B77B68", "#7A87A1", "#788D66",
"#885578", "#FAD09F", "#FF8A9A", "#D157A0", "#BEC459", "#456648", "#0086ED", "#886F4C",
"#34362D", "#B4A8BD", "#00A6AA", "#452C2C", "#636375", "#A3C8C9", "#FF913F", "#938A81",
"#575329", "#00FECF", "#B05B6F", "#8CD0FF", "#3B9700", "#04F757", "#C8A1A1", "#1E6E00",
"#7900D7", "#A77500", "#6367A9", "#A05837", "#6B002C", "#772600", "#D790FF", "#9B9700",
"#549E79", "#FFF69F", "#201625", "#72418F", "#BC23FF", "#99ADC0", "#3A2465", "#922329",
"#5B4534", "#FDE8DC", "#404E55", "#0089A3", "#CB7E98", "#A4E804", "#324E72", "#6A3A4C",
"#83AB58", "#001C1E", "#D1F7CE", "#004B28", "#C8D0F6", "#A3A489", "#806C66", "#222800",
"#BF5650", "#E83000", "#66796D", "#DA007C", "#FF1A59", "#8ADBB4", "#1E0200", "#5B4E51",
"#C895C5", "#320033", "#FF6832", "#66E1D3", "#CFCDAC", "#D0AC94", "#7ED379", "#012C58"
};
Aquí está la primera 256 como una imagen.

(De izquierda a derecha) (arriba a abajo). Usted puede ser capaz de obtener un poco más colores distintos si se aseguró de cada color era tan equidistantes como sea posible dentro del espacio de color. Esa tabla de consulta recoge cada color adicional como máximo distinto de todos los colores anteriores en lugar de designar el N al comienzo y luego trazar el espacio de color. Así que sí, la fuerza bruta y un algoritmo de color dsitance alto nivel y listo para hacer de este mismo conjunto de color en sí mismo. En el transcurso de un día o dos.













