Можно использовать цветовая модель 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);
}
Если 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 это?
Вот идея. Предположите, что цилиндр HSV
Определяет верхнее и нижние пределы, которые Вы хотите для Яркости и Насыщенности. Это определяет квадратное кольцо сечения в пространстве.
Теперь, рассейте точки N случайным образом в этом пространстве.
Тогда применяют повторяющийся алгоритм отвращения на них, или для постоянного числа повторений, или пока точки не стабилизировались.
Теперь у Вас должны быть точки N, представляющие N цвета, которые максимально отличаются в цветовом пространстве, которым Вы интересуетесь.
Hugo
Вот является решение управляемого Вашей "отличной" проблемой, которая полностью раздута:
Создают сферу единицы и упали на пункты на нем с отпором зарядам. Выполните систему частиц, пока они больше не перемещаются (или дельта является "достаточно небольшой"). На данном этапе каждая из точек максимально далеко друг от друга. Преобразуйте (x, y, z) к rgb.
я упоминаю его, потому что для определенных классов проблем, этот тип решения может работать лучше, чем грубая сила.
я первоначально видел этот подход здесь для составления мозаики сферы.
Снова, самые очевидные решения пересечения пространства HSL или пространства RGB будут, вероятно, работать просто великолепно.