Ну если по-простому, есть несколько точек отсчета. Если брать радугу, скажем 7 -
(К-О-Ж-З-Г-С-Ф) (0-1-2-3-4-5-6)
Есть количество линий для градиента - n (0..n-1) (25 допустим)
Есть линия с индексом i (7)
Находим позицию цвета линии -- double x = 6*i/(n -1); (0.25*7 = 1.75)
Далее находим две ближайших точки отсчета (1 и 2, т.е. О и Ж) и расстояние до них (0.75 и 0.25)
Далее линейно интерполируем каналы.
R(result) = (1 - 0.75)*R(О) + (1 - 0.25)*R(Ж) G(result) = (1 - 0.75)*G(О) + (1 - 0.25)*G(Ж) B(result) = (1 - 0.75)*B(О) + (1 - 0.25)*B(Ж)
Все, собственно.
https://en.wikipedia.org/wiki/HSL_and_HSV
там внизу формулы преобразования в RGB
Вот тебе функция. Развлекайся.
color hsb2rgb(double Hue, // угол в градусах double Saturation, // Насыщенность в процентах double Brightness) // яркость в диапазоне -1..+1 { Brightness = MathMax(Brightness,-1); Brightness = MathMin(Brightness,1); Saturation = MathMax(Saturation,0); Saturation = MathMin(Saturation,100); double Pi2=MathArcsin(1.0)*4; // 2*Пи double A = Pi2 * Hue / 360; double R = MathCos(Hue) * Saturation / 100 + Brightness * 3; double G = MathCos(Hue+Pi2/3)* Saturation / 100 + Brightness * 3; double B = MathCos(Hue-Pi2/3)* Saturation / 100 + Brightness * 3; int r = MathRound((R/(1.0+MathAbs(R))+4.0/5.0)*255*5/8.0); int g = MathRound((G/(1.0+MathAbs(G))+4.0/5.0)*255*5/8.0); int b = MathRound((B/(1.0+MathAbs(B))+4.0/5.0)*255*5/8.0); return((b<<16)+(g<<8)+r); }
В прицепе пример (скрипт). Рисует такую вот фигулю.
На вопросы отвечу, если есть.
Функция не является фицияльным стандартом пересчёта HSB в RGB. Писал от балды.
Функция не является фицияльным стандартом пересчёта HSB в RGB. Писал от балды.
Вот и верь после этого людям ...
А кто такой HSB ?
Вот и верь после этого людям ...
А кто такой HSB ?
Спасибо
[Добавлено]: Интересуетесь эргономикой?
Спасибо
[Добавлено]: Интересуетесь эргономикой?
Чо? Я дажи слова такова низнаю. Эта про заборы? :)
Чо? Я дажи слова такова низнаю. Эта про заборы? :)
Не чо, а що
[Добавлено]: Это - когда что-нибудь показываешь, и все тебя понимают.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем доброго времени суток!
Может кто вменяемо объяснить как вычисляется цветовой градиент...
Пример: Раскрасить 8 линий индикатора в цвета радуги от красного до фиолетового. Если задачу усложнить, то не 8 а скажем 10-20, но для простоты можно взять и 8.
В свое время мне присылали образец реализации подобной задачи для MT5 но так это там мутно реализовано... что я не понял...
Заранее благодарен.