2009-09-08 9 views
0

Хорошо, так что я смотрю на типичный выбор цвета, и это выглядит примерно так:Цвет Интерполяция

image

Если мы имеем дело только с высоко насыщенными цветами, смешивание модели ведет себя так:

R 255 
G 0 
B 0 

R 255 
G 0 -> 255 
B 0 

R 255 
G 255 
B 0 

R 255 -> 0 
G 255 
B 0 

R 0 
G 255 
B 0 

R 0 
G 255 
B 0 -> 255 

R 0 
G 255 
B 255 

R 0 
G 255 -> 0 
B 255 

R 0 
G 0 
B 255 

R 0 -> 255 
G 0 
B 255 

R 255 
G 0 
B 255 

R 255 
G 0 
B 255 -> 0 

R 255 
G 0 
B 0 

можно ли определить интерполирующую функцию F, которая принимает значение от 0 до 1 и производит цвет на этом спектре (где 0 и 1 соответствуют левым и правым частям спектра, размещенному выше)? Меня интересуют только насыщенные цвета (один компонент всегда 255.). Кроме того, я замечаю, что эта схема смещается от R к G к B. Однако существует ли аналогичная функция, которая смешивается между голубым, пурпурным и желтым? И хотя это неверно, если f (0) произвело голубой, а f (1) произвело желтый цвет, тогда f (0,5) создаст зеленый цвет, подобный тому, который вы могли бы достичь, если бы вы смешивали две краски.

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

+0

Добро пожаловать в StackOverflow! Я добавил изображение для вас. Надеюсь, это поможет. –

+0

Спасибо! Это было быстро! – 2009-09-08 18:21:25

+1

http://en.wikipedia.org/wiki/HSL_and_HSV может помочь. Если нужный диапазон 0-1 - 0-360 градусов. – Pod

ответ

0

http://www.w3.org/TR/css3-color/#hsl-color объясняет HSL для ограниченного веб-сайта CSS3 и включает в себя простую реализацию HSL-> RGB.

+0

Прохладный! Да, похоже, что моя функция в HSL - это всего лишь оттенок от min до max, а насыщение остается постоянным. Однако существует ли схема, более близкая к электромагнитному спектру (ROYGBIV)? – 2009-09-08 18:34:42

+0

Ах, неважно, это. – 2009-09-08 18:45:58

0

HSL может быть лучше, чем RGB в некоторых случаях, но HCL является лучшим визуально. Это вычислительно дороже, но вы можете использовать его в качестве промежуточного шага. Стандартная функция интерполяции всегда:

C(x) = (1.0 - x) * color_1 + x * color_2, where x in (0.0, 1.0) 

Вы хотите сделать это для каждого компонента, где красного зеленый и синего или насыщенности цветового тона и значения.

R(x) = (1.0 - x) * color_1.red + x * color_2.red 
G(x) = (1.0 - x) * color_1.green + x * color_2.green 
B(x) = (1.0 - x) * color_1.blue + x * color_2.blue 

где каждый компонент может быть либо нормализованы (от 0.0 к 1.0) или прямой 0.0 к 255.0.

При использовании значений RGB промежуточные результаты могут быть не такими, какие вы хотите достичь визуально. Однако числовые результаты всегда должны быть. Другими словами, значения R G и B должны плавно перемещаться от начала до конца. Однако визуально это может привести к некоторым нежелательным серым оттенкам, и именно там HCL светит.

Отъезд this учебник, где я углубляюсь.

 Смежные вопросы

  • Нет связанных вопросов^_^