Как автоматически генерировать “отличные” цвета N?

186
задан Tom Burris 12 December 2016 в 02:42
поделиться

4 ответа

Можно использовать цветовая модель HSL для создания цветов.

, Если все Вы хотите, отличается оттенки (вероятно), и небольшие изменения на легкости или насыщенности, можно распределить оттенки как так:

// assumes hue [0, 360), saturation [0, 100), lightness [0, 100)

for(i = 0; i < 360; i += 360 / num_colors) {
    HSLColor c;
    c.hue = i;
    c.saturation = 90 + randf() * 10;
    c.lightness = 50 + randf() * 10;

    addColor(c);
}
77
ответ дан strager 23 November 2019 в 05:49
поделиться

Если N является достаточно большим, Вы собираетесь получить некоторые подобно выглядящие цвета. Существуют только столь многие из них в мире.

, Почему не только равномерно распределяют их через спектр, как так:

IEnumerable<Color> CreateUniqueColors(int nColors)
{
    int subdivision = (int)Math.Floor(Math.Pow(nColors, 1/3d));
    for(int r = 0; r < 255; r += subdivision)
        for(int g = 0; g < 255; g += subdivision)
            for(int b = 0; b < 255; b += subdivision)
                yield return Color.FromArgb(r, g, b);
}

, Если Вы хотите перепутать последовательность так, чтобы схожие цвета не были друг рядом с другом, Вы могли, возможно, переставить получающийся список.

я underthinking это?

1
ответ дан mqp 23 November 2019 в 05:49
поделиться

Вот идея. Предположите, что цилиндр HSV

Определяет верхнее и нижние пределы, которые Вы хотите для Яркости и Насыщенности. Это определяет квадратное кольцо сечения в пространстве.

Теперь, рассейте точки N случайным образом в этом пространстве.

Тогда применяют повторяющийся алгоритм отвращения на них, или для постоянного числа повторений, или пока точки не стабилизировались.

Теперь у Вас должны быть точки N, представляющие N цвета, которые максимально отличаются в цветовом пространстве, которым Вы интересуетесь.

Hugo

33
ответ дан Community 23 November 2019 в 05:49
поделиться

Вот является решение управляемого Вашей "отличной" проблемой, которая полностью раздута:

Создают сферу единицы и упали на пункты на нем с отпором зарядам. Выполните систему частиц, пока они больше не перемещаются (или дельта является "достаточно небольшой"). На данном этапе каждая из точек максимально далеко друг от друга. Преобразуйте (x, y, z) к rgb.

я упоминаю его, потому что для определенных классов проблем, этот тип решения может работать лучше, чем грубая сила.

я первоначально видел этот подход здесь для составления мозаики сферы.

Снова, самые очевидные решения пересечения пространства HSL или пространства RGB будут, вероятно, работать просто великолепно.

5
ответ дан plinth 23 November 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: