Другие языки программирования и технологии

Как рассчитать палитру радуги.

Имеется 120 светодиодов. Нужно каждому из них задать цвет в формате RGB (тремя байтами), так чтобы получилась радуга. Как рассчитать значения этих байт?
Поскольку в радуге 7 цветов, то на один цвет приходится 120/7=17 оттенков одного цвета.
Причем от чистого цвета в сторону соседнего чистого цвета по радуге. Вот и считай..
На примере перехода от красного (254,0,0) к оранжевому (254,126,0) - шаг изменения цвета G равен 126/17=7
Итого
for(G=0 ; G <126 ; G +=7) {выводим цвет RGB}

Если же тебе нужен не плавный, а резкий переход, то задача намного упрощается - просто цикл от 1 до 7 и выводишь подряд 17 чистых цветов радуги.
Жанебек Жананов
Жанебек Жананов
60 417
Лучший ответ
В качестве идеи:

0 - максимум красного, отсутствие синего и зелёного
60 - максимум зелёного, отсутствие красного и синего
120 - максимум синего - отсутствие красного и зелёного

Сначала постепенно снижаем красный и увеличиваем зелёный, потом постепенно снижаем зелёный и увеличиваем синий. Но вот границы диапазонов и линейность увеличения/уменьшения - это экспериментально.

Для большей реалистичности на синем конце надо добавить немного красного - чтобы получить фиолетовый. Это уже особенность рецепторов глаза.
Bunyod Ravshanov
Bunyod Ravshanov
91 121
Как вариант (пример на C#):

Color[] colors = new Color[120];

Color[] rc = { Color.Red, Color.Orange, Color.Yellow, Color.Lime, Color.SkyBlue, Color.Blue, Color.Violet };

for (int i = 0; i < 6; i++) {
for (int x = 0; x < 20; x++) {
int r = rc[i].R - (rc[i].R - rc[i + 1].R) / 20 * x;
int g = rc[i].G - (rc[i].G - rc[i + 1].G) / 20 * x;
int b = rc[i].B - (rc[i].B - rc[i + 1].B) / 20 * x;
colors[i * 20 + x] = Color.FromArgb(r, g, b);
}
}