Функция разложения цвета на оттенки. - страница 2

 
Alexey Viktorov:

Для CodeBade безусловно надо писать на международном языке. Но зачем на русскоязычном форуме на этом настаивать???

Лично мне противен этот международный... потому, что я его совсем не знаю и мне гораздо понятней наш родной Русский.

Главная проблема в таком коде, что кирилица не поддерживается при отладке.


а так же не работает Alt+G (перейти к определению переменной). 


 
И компонент слово мужского рода. 
 
Алексей Тарабанов:
И компонент слово мужского рода. 

А компонета женского.

 
HSL
HSL — Википедия
HSL — Википедия
  • ru.wikipedia.org
HSL, HLS или HSI (от англ.  ()) — цветовая модель, в которой цветовыми координатами являются тон, насыщенность и светлота. Следует отметить, что HSV и HSL — две разные цветовые модели (lightness — светлота, что отличается от яркости). L = 1 2 ( M A X + M I N ) {\displaystyle L={\begin{matrix}{\frac...
 

Реter Konow
:

Также очень интересно, как эта задача решается с помощью класса CCanvas. Как можно получить через него все оттенки исходного цвета?

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164 union rgb {uint clr; uchar c[4];}; void OnStart()   {    rgb c,cc;    double d=5;    while(!IsStopped())      {       c.c[2]=uchar(127.5*(1+sin(d*1.2))+0.4999); c.c[1]=uchar(127.5*(1+sin(d*1.9))+0.4999); c.c[0]=uchar(127.5*(1+sin(d*2.8))+0.4999); // генерируем новый цвет       cc.clr=c.clr;       double k0,k1,k2;       if(c.c[2]>=c.c[1] && c.c[2]>=c.c[0]) {k2=1; if(c.c[2]==0) {k1=1; k0=1;} else {k1=(double)c.c[1]/c.c[2]; k0=(double)c.c[0]/c.c[2];}}// если Red - максимальный цвет       else if(c.c[1]>=c.c[2] && c.c[1]>=c.c[0]) {k1=1; k2=(double)c.c[2]/c.c[1]; k0=(double)c.c[0]/c.c[1];} // если Green - максимальный цвет       else {k0=1; k2=(double)c.c[2]/c.c[0]; k1=(double)c.c[1]/c.c[0];} // если Blue - максимальный цвет       for(int y=0; y<W.Height; y++)         {          double k=255.0*(double)y/(W.Height-1);          c.c[2]=uchar(k2*k+0.4999);          c.c[1]=uchar(k1*k+0.4999);          c.c[0]=uchar(k0*k+0.4999);          Canvas.LineHorizontal(0,W.Width-1,y,ColorToARGB(c.clr,240));         }       Canvas.FillRectangle(W.Width/2-80,W.Height/2-50,W.Width/2+80,W.Height/2+50,ColorToARGB(cc.clr,240));       Canvas.CurentFont("Tahoma",20,22,ColorToARGB(~cc.clr)); // 20 -  размер шрифта, 22 - межстрочный интервал       Canvas.TextPosition(W.Width/2-70,W.Height/2-40);       Canvas.Comm("Текущий цвет:");       Canvas.Comm("R = "+string(cc.c[2]));       Canvas.Comm("G = "+string(cc.c[1]));       Canvas.Comm("B = "+string(cc.c[0]));       ChartChanged(); // на всякий случай контролируем изменение размеров окна, т.к. это скрипт (в индикаторах и экспертах это происходит автоматически)       Canvas.Update();       d+=0.01;       Sleep(30);      } }

Маркером выделено то, что касается расчета градиента, остальное вывод на экран.


Файлы:
Gradient.mq5  4 kb
 
Nikolai Semko:

Главная проблема в таком коде, что кирилица не поддерживается при отладке.

..

а так же не работает Alt+G (перейти к определению переменной). 

Ха !

А вот это - уже очень серьезный недостаток такого вот "русского" кода !

Петер, ты как отлаживаешь свой код ? Как смотришь на значения тех или иных "русскоязычных" переменных ?

* * *

Как правильно указали выше - есть системы HSL и HLS, которые давно стандартизированы, и переходы к ним от RGB осуществляются стандартными формулами. Кроме того, имеется система Lab. Какой смысл изобретать велосипед ?

Мне не совсем ясно, где можно применить данные функции. Это - весьма частая ошибка местных программистов - они пишут весьма интересные программы, но вот с демонстрацией применения - затык. Сполгода назад, помню, был представлен класс работы с Canvas'ом - было представлено весьма впечатляющее демо. Но применения этим возможностям я не видел, автор обещал их продемонстрировать, но так и не продемонстрировал. 

У меня складывается впечатление, что большая часть всех этих демок создается для того, чтобы потешить свое ЧСВ - "глядите, как я умею". Не спорю, дело нужное... но для большинства бесполезное, поскольку большинству интересно именно применение, а вот с применением - и загвоздка.

Многие пишут мелкие полезные примочки. Но, пока что я вижу, что только fxsaber представил библиотеку, которая, на мой взгляд, очень полезна буквально всем. Такого объемного, и при этом общеполезного труда - я не знаю. В данном же случае, с Canvas'ом - и вовсе грустно - мне сложно представить, куда это все можно применить так, чтобы было нужно сколь-нибудь заметной части форумчан.

Хотелось бы видеть конкретные примеры применения, пусть даже без раскрытия исходного кода - просто саму идею, где это все можно с пользой применить ?  

 
Nikolai Semko:

Главная проблема в таком коде, что кирилица не поддерживается при отладке.


а так же не работает Alt+G (перейти к определению переменной). 

Проблема, Николай, не в коде и не в отладчике, проблема в людях, в отношениях. Если мне будет интересен этот код, я без особых усилий заменю имена переменных и отладка будет работать. Но вот требовать пользоваться международным, там где иностранцы не знающие нашего великого языка не бывают... Да ещё и потребовав, не скачивать и не тестировать этот код...

 
Georgiy Merts:

Ха !

А вот это - уже очень серьезный недостаток такого вот "русского" кода !

Петер, ты как отлаживаешь свой код ? Как смотришь на значения тех или иных "русскоязычных" переменных ?

* * *

Как правильно указали выше - есть системы HSL и HLS, которые давно стандартизированы, и переходы к ним от RGB осуществляются стандартными формулами. Кроме того, имеется система Lab. Какой смысл изобретать велосипед ?

Мне не совсем ясно, где можно применить данные функции. Это - весьма частая ошибка местных программистов - они пишут весьма интересные программы, но вот с демонстрацией применения - затык. Сполгода назад, помню, был представлен класс работы с Canvas'ом - было представлено весьма впечатляющее демо. Но применения этим возможностям я не видел, автор обещал их продемонстрировать, но так и не продемонстрировал. 

У меня складывается впечатление, что большая часть всех этих демок создается для того, чтобы потешить свое ЧСВ - "глядите, как я умею". Не спорю, дело нужное... но для большинства бесполезное, поскольку большинству интересно именно применение, а вот с применением - и загвоздка.

Многие пишут мелкие полезные примочки. Но, пока что я вижу, что только fxsaber представил библиотеку, которая, на мой взгляд, очень полезна буквально всем. Такого объемного, и при этом общеполезного труда - я не знаю. В данном же случае, с Canvas'ом - и вовсе грустно - мне сложно представить, куда это все можно применить так, чтобы было нужно сколь-нибудь заметной части форумчан.

Хотелось бы видеть конкретные примеры применения, пусть даже без раскрытия исходного кода - просто саму идею, где это все можно с пользой применить ?  

Джорж, я отлаживаю код в голове. :)  Всегда так делал. Ищу ошибки рассуждая логически. Очень помогает функция Alert()

Для меня необходимо всегда искать свое решение.  Отсутствие отладки Метаэдитор мне не мешает. Я приспособился и нашел свои методы обнаружения ошибок. А вот в глобальной разработке пользоваться только чужим (пусть и очень понятным) языком - настоящий барьер. Если бы ты вел глобальную разработку в одиночку, ты бы меня понял. Русский язык помогает мне выжать из собственного мозга максимум производительности. На самом деле, я программирую на двух языках. 60% русского и 40% английского. Двуязычный код запоминается гораздо лучше чем моно-язычный. Он также лучше читается. Глядя только на английский код (с кучей синтаксиса), много не запомнишь и много не напрограммируешь. Поэтому, все пользуются библиотеками. Я же могу легко запоминать свою программу, потому что забочусь о собственном удобстве чтения и запоминания, а не о соблюдении чьих то придуманных стандартов. Именно поэтому, я столько сделал в одиночку.

Применение графики в торговых программах сделает их более привлекательными для продажи в Маркете. Об этом тоже нужно заботиться. Это и есть практическое применение.


Вообще, таблицы, управление поведением программы, настройка автоматики, вывод информации - вот для чего нужна графика. Странно, что ты считаешь, что торговым программам это не нужно.

 
Nikolai Semko:

Маркером выделено то, что касается расчета градиента, остальное вывод на экран.


Cпасибо, Николай. А так, чтобы послать цвет и сразу все оттенки получить? Такое есть?

 
Nikolai Semko:

Маркером выделено то, что касается расчета градиента, остальное вывод на экран.


Кстати, судя по картинке, разложение цвета здесь не полное. Только половина. Диапазон должен простираться от абсолютно белого до абсолютно черного, через все оттенки конкретного цвета.