Скачать MetaTrader 5

Цветовой градиент

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нет времени на изучение MQL5? Закажи приложение у разработчика!
Debugger
2501
Debugger 2011.07.28 15:48 

Всем доброго времени суток!
Может кто вменяемо объяснить как вычисляется цветовой градиент...

Пример: Раскрасить 8 линий индикатора в цвета радуги от красного до фиолетового. Если задачу усложнить, то не 8 а скажем 10-20, но для простоты можно взять и 8.

В свое время мне присылали образец реализации подобной задачи для MT5 но так это там мутно реализовано... что я не понял...

Заранее благодарен.

Виктор
Модератор
6559
Виктор 2011.07.28 16:24  

Вот тут чего-то во что-то красят. Может помочь.


Файлы:
Комбинатор
15919
Комбинатор 2011.07.28 16:46  

Ну если по-простому, есть несколько точек отсчета. Если брать радугу, скажем 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(Ж)

Все, собственно.

Сергей
712
Сергей 2011.07.28 17:27  

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

там внизу формулы преобразования в RGB

Виталий
340
Виталий 2011.07.28 22:20  
Вот ещё вариант https://www.mql5.com/ru/code/9311
Vladimir Gomonov
8277
Vladimir Gomonov 2011.07.29 00:56  

Вот тебе функция. Развлекайся.

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. Писал от балды.

Файлы:
Алексей Тарабанов
7271
Алексей Тарабанов 2011.07.29 01:23  
MetaDriver:

Функция не является фицияльным стандартом пересчёта HSB в RGB. Писал от балды.


Вот и верь после этого людям ...

А кто такой HSB ?

Vladimir Gomonov
8277
Vladimir Gomonov 2011.07.29 01:25  
tara:


Вот и верь после этого людям ...

А кто такой HSB ?

https://ru.wikipedia.org/wiki/HSB
Алексей Тарабанов
7271
Алексей Тарабанов 2011.07.29 01:29  

Спасибо

[Добавлено]: Интересуетесь эргономикой?

Vladimir Gomonov
8277
Vladimir Gomonov 2011.07.29 01:35  
tara:

Спасибо

[Добавлено]: Интересуетесь эргономикой?

Чо? Я дажи слова такова низнаю. Эта про заборы? :)

Алексей Тарабанов
7271
Алексей Тарабанов 2011.07.29 01:37  
MetaDriver:

Чо? Я дажи слова такова низнаю. Эта про заборы? :)


Не чо, а що

[Добавлено]: Это - когда что-нибудь показываешь, и все тебя понимают.

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий