Алгоритм для генерации уникальных цветов

Предоставление учетных данных в командной строке не очень хорошая идея. Приведенные выше ответы хороши, но не стоит упоминать

mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql

Где etc / myhost.cnf - это файл, который содержит хост, пользователя, пароль, и вы избегаете выставления пароля в командной строке. Вот образец,

[client]
host=hostname.domainname
user=dbusername
password=dbpassword
26
задан Peter O. 19 August 2017 в 04:28
поделиться

3 ответа

Имеет ли количество возможных элементов разумную нижнюю границу? Одно быстрое и простое решение - просто сохранить массив значений цвета с использованием идентификатора элемента. Это предполагает, что у вас относительно мало цветов, и вы уверены, что не превысите определенное количество элементов.

Если вы хотите генерировать цвета, а не использовать список, один трюк сделать их последовательными и достойными - это создать их с помощью HSB. Предварительно определите яркость и насыщенность, а затем основайте значение оттенка на какой-либо функции идентификатора (это может быть множество вещей в зависимости от того, сколько идентификаторов вы планируете иметь, но умножение идентификатора на некоторую сумму (и модификация, когда она превышает 255!) - хороший приблизительный подход. При таком подходе все цвета будут «выравниваться». с точки зрения насыщенности и яркости, но каждый из них будет иметь свой цвет.

Мне немного скучно на работе, поэтому я собрал быстрое решение:

class HsbColor
{
    public int Hue { get; set; }
    public int Saturation { get; set; }
    public int Brightness { get; set; }

    public Color ToRGB
    {
        // left as exercise to the reader...
    }
}

public class Item
{


    public int Id { get; set; }
    private static const byte EXPECTED_MAX = 15;
    private static int HUE_FACTOR = 255 / EXPECTED_MAX;

    public HsbColor Color 
    {
       get {

         var color = new HsbColor() { Saturation = 175, Brightness = 175 };

         color.Hue = (Id * HUE_FACTOR) % 255;

         return color;
       }
    }
}
8
ответ дан 28 November 2019 в 06:25
поделиться

Вы можете умножить идентификатор на золотое сечение (phi), чтобы получить число 0 <= n <1. Все числа, которые вы генерируете, будут равномерными распределено.

PHI = (1 + sqrt(5))/2
n = id * PHI - floor(id * PHI) 

Затем нужно преобразовать это число в цвет, например

hue = floor(n * 256)
20
ответ дан 28 November 2019 в 06:25
поделиться

Графические дизайнеры знают, что если много цветов будет использоваться рядом друг с другом на информационном дисплее, цвета должны быть относительно близки друг к другу в цветовом пространстве. Небольшие изменения насыщенности или оттенка обычно лучше, чем большие скачки - когда задействовано много цветов, человеческому глазу на самом деле легче усваивать информацию, когда цветовые расстояния не очень велики.

Кроме того, не надо. Не забывайте, что некоторые из ваших пользователей будут дальтониками. Поскольку существует так много разновидностей дальтонизма, трудно понять, каких комбинаций следует избегать. Может кто-нибудь еще ответит на этот вопрос?

10
ответ дан 28 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

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