Мое приложение содержит линейный график, который может отображать 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 наЦветовое колесо.Затем для каждого следующего цвета я обхожу цветовое колесо, ища самый большой разрыв между цветами, и как только я его нашел, я вставляю новый цвет в этот разрыв.Кажется, он работает лучше, но все еще не идеально, поскольку, как только промежутки становятся маленькими, последовательные цвета снова становятся похожими.