Las respuestas existentes que mencionan el tono, la saturación, la representación del valor de los colores son muy elegantes, están más cerca de cómo los humanos perciben el color, y probablemente sea mejor seguir sus consejos. También crear una larga lista precalculada de colores y elegir subconjuntos de ellos según sea necesario es rápido y confiable.
Sin embargo, aquí hay un código que responde a su pregunta directamente: generará colores aleatorios en RGB que son lo suficientemente diferentes. Hay dos inconvenientes en esta técnica que puedo ver. En primer lugar, estos colores son realmente aleatorios y pueden parecer bastante burdos, y segundo, puede llevar un tiempo que el código tropiece con los colores que funcionan, dependiendo de cuán "lejanos" requiera que sean los colores.
function hex2rgb(h) {
return [(h & (255 << 16)) >> 16, (h & (255 << 8)) >> 8, h & 255];
}
function distance(a, b) {
var d = [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
return Math.sqrt((d[0]*d[0]) + (d[1]*d[1]) + (d[2]*d[2]));
}
function freshColor(sofar, d) {
var n, ok;
while(true) {
ok = true;
n = Math.random()*0xFFFFFF<<0;
for(var c in sofar) {
if(distance(hex2rgb(sofar[c]), hex2rgb(n)) < d) {
ok = false;
break;
}
}
if(ok) { return n; }
}
}
function getColors(n, d) {
var a = [];
for(; n > 0; n--) {
a.push(freshColor(a, d));
}
return a;
}
La distancia entre los colores es la Euclidean distance medida por los componentes B R, G, y. Por lo tanto, lo más lejos que pueden estar dos colores (blanco y negro) es aproximadamente 441.67.
Para usar este código, llame al getColors
donde el primer parámetro es el número de colores, y el segundo es la distancia mínima entre dos de ellos. Devolverá una matriz de valores RGB numéricos.
Cualquier método para elegir colores aleatorios a veces va a generar colores similares. Si nunca desea que sean similares, prepare una lista de colores adecuados y selecciónela (al azar si lo desea). –
La razón más importante por la que no desea utilizar el método sugerido es que lo que las personas perciben visualmente como el espectro de color no es linealmente proporcional al espectro de color hexadecimal. Es por eso que los ["colores web seguros"] (http://www.w3schools.com/html/html_colors.asp) no se parecen en nada a un arcoiris. – Nicole
http://phrogz.net/tmp/24colors.html – Phrogz