Я бы предложил генерировать случайные значения RGB (объединить три случайных числа), а затем создать функцию, которая измеряет разницу в цвете между сгенерированным случайным цветом и значениями в вашей структуре данных.Если ваш сгенерированный цвет слишком близок к тому, который у вас уже есть, создайте новый.Вам нужно будет решить, насколько «отличным» вы хотите, чтобы случайный цвет был от того, который у вас уже есть, но разница только в нескольких точках R, G и B не будет заметно различаться, поэтому вам следует искать какой-то минимумразделение по крайней мере в одном канале.
Поиск «Рассчитать цветовую разницу RGB» дает вам множество ссылок на то, как рассчитать значимую разницу между двумя значениями цвета.Эта ссылка из этого поиска имеет конкретное уравнение, и вот предыдущий вопрос о SO о цветовых различиях.
Вы также можете создавать дополнительные цвета из того, что у вас уже есть, есливам просто нужны разные цвета и вам не нужны / не нужны действительно случайные цвета.
Вы можете сгенерировать случайный цвет, подобный этому, в форме данных или в форме шестнадцатеричной строки:
// generate r,g,b data structure like {r: 255, g: 30, b: 09}
function generateRandomColorData() {
function randomColorVal() {
return(Math.floor(Math.random() * 256));
}
return {r:randomColorVal(), g: randomeColorVal(), b: randomColorVal()};
}
// generate hex string color value like FF4409
function generateRandomColorHex() {
function randomColorVal() {
var val = Math.floor(Math.random() * 256).toString(16);
if (val.length < 2) {
val = "0" + val;
}
return(val);
}
return(randomColorVal() + randomColorVal() + randomColorVal());
}