Я предполагаю, что под 6-значным числом вы подразумеваете какой-то шестнадцатеричный код, например #ff0000
(красный).Генерировать случайные коды, подобные этим, довольно просто, если рассматривать их как случайные 24-битные целые числа.То есть случайное число от 0 до 2 ^ 24 - 1. Примерно так:
def randomRgbCode() {
def rgb = new Random().nextInt(1 << 24) // A random 24-bit integer
'#' + Integer.toString(rgb, 16).padLeft(6, '0')
}
Код цвета, который генерирует эта вещь, довольно случайный, но выглядит не очень хорошо;много серых цветов, закрашенных яркими. Это некоторые цвета, сгенерированные этой функцией.
Более яркие цвета могут быть достигнуты при случайных значениях HSL вместо RGB, например, при генерации случайных оттенков, высокой насыщенностии средняя легкость.Если вы используете эти цвета для стиля CSS, то довольно просто сгенерировать цветовые коды, так как CSS теперь поддерживает значения HSL :
def randomHslCode() {
def rnd = new Random()
def h = rnd.nextInt(360)
int s = 65 + rnd.nextInt(35) // Quite saturated
def l = 50
"hsl($h, $s%, $l%)"
}
Это некоторые цвета, сгенерированные этой новой функцией.Как видите, гораздо ярче.
Теперь, если вы не собираетесь использовать цветовые коды в стилях CSS и вам нужно для генерации кодов RGB, вы можете сгенерировать случайный HSLзначения, как описано выше, а затем преобразовать эти значения в RGB.Процесс довольно прост , но требует немного больше кодирования:
import static Math.abs
def floor(x) { x as int }
def randomVividRgbCode() {
def rnd = new Random()
def h = rnd.nextFloat()
def s = 0.65f + rnd.nextFloat() * 0.35f // Quite saturated
def l = 0.5f
rgbToColorCode(*hslToRgb(h, s, l))
}
def rgbToColorCode(r, g, b) {
def rgb = floor(r * 255) << 16 |
floor(g * 255) << 8 |
floor(b * 255)
'#' + Integer.toString(rgb, 16).padLeft(6, '0')
}
def hslToRgb(h, s, l) {
def c = (1 - abs(2 * l - 1)) * s // Chroma.
def h1 = h * 6
def x = c * (1 - abs(h1 % 2 - 1))
def rgb = h1 < 1 ? [c, x, 0] :
h1 < 2 ? [x, c, 0] :
h1 < 3 ? [0, c, x] :
h1 < 4 ? [0, x, c] :
h1 < 5 ? [x, 0, c] :
[c, 0, x]
def (r, g, b) = rgb
def m = l - c * 0.5
[r + m, g + m, b + m]
}
Я надеюсь, что код не такой загадочный :). Это некоторые цвета, сгенерированные им.
Теперь вы можете заметить, что некоторые из сгенерированных цветов очень похожи, что может быть не очень хорошо, если вы хотите различитьлинии на графике.Что вы можете сделать, чтобы избежать этого, это иметь хороший поддон заранее определенных и легко различимых цветов (вы можете найти их в Интернете) и выбирать цвета оттуда.Если у вас заканчиваются цвета из палитры (возможно, нет ограничений на количество линий на диаграмме), вы можете затем создать случайный цвет, используя один из методов, описанных выше, или любой другой:)