Здравствуйте, tnikolai, Вы писали:
T>Есть несколько эл на странице, их может быть разное количество, но не более 50.
T>Их надо разукрасить в разный цвет. T>Вот тут проблемма, как подобрать набор цветов, чтоб они хорошо отличались друг от друга.
Здравствуйте, Senyai, Вы писали:
T>>Вот тут проблемма, как подобрать набор цветов, чтоб они хорошо отличались друг от друга.
S>http://en.wikipedia.org/wiki/Hue -> brains -> http://jsfiddle.net/WmZq7/1/
Два соседних дива практически не отличаются (особенно на зеленом диапазоне). Но мне кажется то, что просит ТС, не реально
А за пример спасибо
Здравствуйте, rFLY, Вы писали:
FLY>Здравствуйте, Senyai, Вы писали:
T>>>Вот тут проблемма, как подобрать набор цветов, чтоб они хорошо отличались друг от друга.
S>>http://en.wikipedia.org/wiki/Hue -> brains -> http://jsfiddle.net/WmZq7/1/ FLY>Два соседних дива практически не отличаются (особенно на зеленом диапазоне). Но мне кажется то, что просит ТС, не реально FLY>А за пример спасибо
Так и делали, 20 цветов ещё более-менее разные получаются, но 30-40 , особенно зелёные уже почти одиннаковые.
Оказывается цветов не так и много.
Может есть какой-нибудь сбособ усилить различие цветов?
Здравствуйте, tnikolai, Вы писали:
T>Есть несколько эл на странице, их может быть разное количество, но не более 50.
T>Их надо разукрасить в разный цвет. T>Вот тут проблемма, как подобрать набор цветов, чтоб они хорошо отличались друг от друга.
Я в таких случаях беру квазислучайное распределение в линейном цветовом пространстве.
Более сложная задача: как подобрать красивый набор контрастных цветов.
Здравствуйте, Senyai, Вы писали:
S>http://en.wikipedia.org/wiki/Hue -> brains -> http://jsfiddle.net/WmZq7/1/
Отличная попытка.
Нюансы:
1. Только оттенка — недостаточно. Яркостная составляющая также крайне важна для распознавания цветов. http://jsfiddle.net/WmZq7/9/ — для 20 цветов работает вполне нормально (для 50 всё-таки плоховато)
2. Если важна разница между соседями — то поворот hue на золотое сечение работает более-менее приемлемо: http://jsfiddle.net/WmZq7/10/
3. А вообще — прекрасная задача! Удивляюсь, что сходу не нашёл её обсуждения в сети.
Вот у нас есть некий color space. Есть некое N. Как нам максимизировать минимальное попарное расстояние между N точками в этом color space?
В принципе, решение должно быть общим — хоть для RGB, хоть для HSV. Если оно есть, то лучше всего в него скормить что-то типа СIEDE2000 в качестве метрики расстояния.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Вот у нас есть некий color space. Есть некое N. Как нам максимизировать минимальное попарное расстояние между N точками в этом color space?
Квазислучайная последовательность не совсем максимизирует минимальное попарное расстояние, но близко к тому. Результат можно улучшить несколькими итерациями алгоритма Ллойда.
Здравствуйте, Don Reba, Вы писали:
DR>Квазислучайная последовательность не совсем максимизирует минимальное попарное расстояние, но близко к тому. Результат можно улучшить несколькими итерациями алгоритма Ллойда.
Не понял, как алгоритм Ллойда поможет. Он же кластеризует N точек в M кластеров. Если N = M, то он выходит после первого шага, оставив точки на местах.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Отличная попытка. S>Нюансы: S>1. Только оттенка — недостаточно. Яркостная составляющая также крайне важна для распознавания цветов. S> http://jsfiddle.net/WmZq7/9/ — для 20 цветов работает вполне нормально (для 50 всё-таки плоховато)
Ты делаешь шаги по хью с поворотом в небольшой градус. Можно к углу прибавить 180 градусов и результат будет ещё более контрастный.
Конечно мой вариант не супер, я в жаваскрипте не в зуб ногой,
но зато гораздо контрастнее:
for(var i=0;i<NUM;i++) {
var color = hsv2rgb((i / 2 + (i % 2) / 2 * NUM) / NUM, 0.8, v);
if(i % 2 == 1) {
v = 1-v;
}
Здравствуйте, Dimonka, Вы писали: D>Ты делаешь шаги по хью с поворотом в небольшой градус. Можно к углу прибавить 180 градусов и результат будет ещё более контрастный.
Это ничего не даст — только переупорядочит ту же самую палитру.
Я к поворту хью добавил колебания сатурации, чтобы раскидать близкие точки чуть подальше.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Dimonka, Вы писали: D>>Ты делаешь шаги по хью с поворотом в небольшой градус. Можно к углу прибавить 180 градусов и результат будет ещё более контрастный. S>Это ничего не даст — только переупорядочит ту же самую палитру. S>Я к поворту хью добавил колебания сатурации, чтобы раскидать близкие точки чуть подальше.
Это я понял. Просто я думал, речь идёт о палитре, готовой сразу к использованию. Т.е. чтобы соседние цвета были контрастными.
Ну и в целом, если палитра из 10-20 цветов готова, то можно добавить несколько градаций яркости и вот уже и набор из как минимум 50 цветов. если конечно под цветом имеется ввиду сочетание RGB, а не только HS.
Здравствуйте, Dimonka, Вы писали:
S>>Здравствуйте, Dimonka, Вы писали: D>>>Ты делаешь шаги по хью с поворотом в небольшой градус. Можно к углу прибавить 180 градусов и результат будет ещё более контрастный. S>>Это ничего не даст — только переупорядочит ту же самую палитру. S>>Я к поворту хью добавил колебания сатурации, чтобы раскидать близкие точки чуть подальше.
Вот ещё нашёл, правда метод не гарантирует 100% разные цвета:
Здравствуйте, Dimonka, Вы писали:
D>Ну и в целом, если палитра из 10-20 цветов готова, то можно добавить несколько градаций яркости и вот уже и набор из как минимум 50 цветов. если конечно под цветом имеется ввиду сочетание RGB, а не только HS.
Вопрос сложнее, чем кажется. "Набор"-то можно сделать хоть из 16 миллионов цветов — вопрос в различаемости. Низконасыщенные тёмные цвета разных оттенков почти неразличимы, также как и светлые.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
D>>Ну и в целом, если палитра из 10-20 цветов готова, то можно добавить несколько градаций яркости и вот уже и набор из как минимум 50 цветов. если конечно под цветом имеется ввиду сочетание RGB, а не только HS. S>Вопрос сложнее, чем кажется. "Набор"-то можно сделать хоть из 16 миллионов цветов — вопрос в различаемости. Низконасыщенные тёмные цвета разных оттенков почти неразличимы, также как и светлые.
Это наталкивает на мысль, что при повышении / понижении яркости, надо повышать порог насыщенности, ниже которого не генерировать цвета.
Здравствуйте, Dimonka, Вы писали:
D>Это наталкивает на мысль, что при повышении / понижении яркости, надо повышать порог насыщенности, ниже которого не генерировать цвета.
Лично меня это наталкивает на мысль поискать решения в области плотной упаковки.
Скажем, можно ввести силы отталкивания между точками в цветовом пространстве, обратно пропорциональные квадрату метрики разницы по CIELAB, и бросив горсть точек случайным образом, предоставить им разбежаться "куда смогут" под действием этих сил до достижения равновесия.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.