Создание списка цветов, от синего до красного, от 0% до 100% - PullRequest
3 голосов
/ 04 сентября 2010

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

Редактировать: Ну, на самом деле, RGB. Подойдет любой язык. Мне просто нужен алгоритм.

Ответы [ 4 ]

3 голосов
/ 05 сентября 2010

Простой вложенный цикл RGB не будет генерировать ваш красный-желтый-зеленый-синий градиент. Если это действительно то, что вы конкретно хотите, то вам следует немного узнать о цветовом круге:

                    red
                     |
           magenta__ | __yellow
                    \|/
                  __/|\__
              blue   |   green
                     |
                    cyan

На самом деле это цветовое колесо HSV, которое очень хорошо работает для понимания аддитивных цветов. В соответствии с этим, вы получаете желтый, смешивая красный и зеленый. Итак, для вашего градиента:

// in javascript:
function cssColor (r, g, b) {
    return 'rgb('+r+','+g+','+b+')';
}

var colors = [];
// Start with solid red:
var r = 255;
var g = 0;
var b = 0;
// From red to yellow:
for (var g=0;g<=255;g++)  colors.push(cssColor(r,g,b));
// From yellow to green:
for (var r=255;r>=0;r--) colors.push(cssColor(r,g,b));
// From green to blue:
for (var b=0;b<=255;b++,g--)  colors.push(cssColor(r,g,b));

Это даст вам массив из 768 цветов. Если вы используете каждый восьмой цвет, вы должны получить массив из примерно 100 цветов:

var subColors = [];
for (var i=0;i<colors.length;i++) {
    if (i%8 == 0) subColors.push(colors[i]);
}

В любом случае, используя эти знания, вы можете получить любой желаемый градиент.

2 голосов
/ 04 сентября 2010

Используйте цветовое пространство HSV для своих цветов (красный - H = 0, S = V = 1, синий - H = 240, S = V = 1), интерполируйте линейно по значению оттенка и преобразуйте их в RGB:

http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB

2 голосов
/ 04 сентября 2010

Это должно сделать это, давая все 16 миллионов или около того цветов.

int[] colors;

for (int r = 0; i <= 255; i++)
{
    for (int g = 0; g <= 255; g++)
    {
        for (int b = 0; b <= 255; b++)
        {
            colors[] = rgb2int(r, g, b);
        }
    }
}

rgb2int(int red, int green, int blue)
{
    return (red << 16) + (green << 8) + blue;
}
1 голос
/ 04 сентября 2010

3 вложенных цикла. цикл один раз на R от 1 до п цикл один раз на г от 1 до п цикл один раз на b от 1 до n

должно дать вам 3 ^ или около того цветов -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...