Здравствуйте, adontz, Вы писали:
A>Почему бы не взять за основу обычный спектр? То есть задать 7 точек в центре цветовых полос и потом интерполировать?
Красный - 255 0 0
Орагжевый - 255 127 0
Жёлтый - 255 255 0
Зелёный - 0 255 0
Голубой - 0 255 255
Синий - 0 0 255
Фиолетовый - 255 0 255
Выкинем оранжевый как побочный продукт воображения Ньютона
Красный - 255 0 0
Жёлтый - 255 255 0
Зелёный - 0 255 0
Голубой - 0 255 255
Синий - 0 0 255
Фиолетовый - 255 0 255
Симметрия данной картины вдохновляет.
Можно поигратся с размерами областей перехода цвета.
Вот короче код который рисует
for (int x = 0; x < 500; x++)
{
for (int y = 0; y < 100; y++)
{
int r = 0;
int g = 0;
int b = 0;
int i0 = 0;
int i1 = 175;
int i2 = 225;
int i3 = 275;
int i4 = 450;
int i5 = 500;
if ((x >= i0)&&(x < i1))
{
r = 255;
g = x*255/(i1- i0);
b = 0;
}
if ((x >= i1)&&(x < i2))
{
r = 255 - ((x - i1)*255/(i2 - i1));
g = 255;
b = 0;
}
if ((x >= i2)&&(x < i3))
{
r = 0;
g = 255;
b = (x - i2)*255/(i3-i2);
}
if ((x >= i3)&&(x < i4))
{
r = 0;
g = 255 - ((x - i3)*255/(i4-i3));
b = 255;
}
if ((x >= i4)&&(x < i5))
{
r = (x - i4)*255/(i5-i4);
g = 0;
b = 255;
}
CDC.SetPixel(x, y, RGB(r, g, b));
}
}