Как создать контрастные цвета?

Мое приложение содержит линейный график, который может отображать 20 или более наборов данных одновременно, но обычно он будет отображать менее 5. Я бы хотел, чтобы каждый набор данных имел уникальный цвет.

В настоящее время я делаю следующее:

setHsl(i * 255.0 / session->getNumDataSets(), 255, 128);

Это работает, но имеет обратную сторону - два последовательных набора данных будут иметь очень похожие цвета. Я' Мне нравится, чтобы каждый сгенерированный цвет был как можно более контрастным по сравнению со всеми предыдущими сгенерированными цветами.

Как лучше генерировать цвета?

Вот моя вторая попытка:

double pos = 0;
if (wheel.size() == 0)
{
    wheel.append(0.0);
    wheel.append(1.0);
}
else
{
    double gap = 0;
    double hi = 0;
    double lo = 0;

    for (int i = 0; i < wheel.size() - 1; i++)
    {
        double g = wheel[i + 1] - wheel[i];
        if (g > gap)
        {
            gap = g;
            lo = wheel[i];
            hi = wheel[i + 1];
        }
    }

    pos = (hi - lo) / 2.0 + lo;

    wheel.append(pos);
    qSort(wheel);
}

QColor c;
c.setHsl(pos * 255.0, 255, 128);
return c.toRgb();

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

6
задан Roland Rabien 30 March 2011 в 00:14
поделиться