A função de decompor a cor em tons. - página 2

 
Alexey Viktorov:

Para CodeBade você deve definitivamente escrever em um idioma internacional. Mas por que insistir nisso no fórum em russo?

Pessoalmente, estou enojado com este internacional... porque não o conheço de forma alguma e é muito mais claro para mim do que nosso russo nativo.

O principal problema com este código é que o Cyrillic não é suportado na depuração.


e também Alt+G não funciona (ir para definição de variável).


 
E a palavra componente é masculina.
 
Алексей Тарабанов:
E a palavra componente é masculina.

E a palavra componente é feminina.

 
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
:

É também muito interessante como este problema é resolvido com a classe CCanvas. Como você pode obter todas as tonalidades da cor original através dela?

#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);      } }

O cálculo do gradiente é destacado, o resto é a saída.


Arquivos anexados:
Gradient.mq5  4 kb
 
Nikolai Semko:

O principal problema com tal código é que o Cyrillic não é suportado na depuração.

..

e também Alt+G não funciona (ir para definição de variável).

Ha !

Esta é uma desvantagem muito séria deste código "russo"!

Peter, como você depura seu código? Como você vê os valores de certas variáveis "de língua russa"?

* * *

Como corretamente apontado acima - existem sistemas HSL e HLS, que há muito foram padronizados, e as transferências de RGB são feitas usando fórmulas padrão. Além disso, existe o sistema Lab. De que adianta reinventar a roda?

Não está muito claro para mim onde estas funções podem ser aplicadas. Este é um erro muito comum dos programadores locais - eles escrevem programas muito interessantes, mas com a demonstração da aplicação - acertam um obstáculo. Seis meses atrás, eu me lembro, uma classe de trabalho com Canvas foi apresentada - houve uma demonstração muito impressionante. Mas eu não vi nenhum uso para estas características, o autor prometeu demonstrá-las, mas nunca o fez.

Tenho a impressão de que a maioria dessas demonstrações são criadas para divertir o ego - "veja como eu posso fazer isso". Tenho certeza de que é uma coisa boa... mas para a maioria das pessoas é inútil, porque a maioria das pessoas está interessada na aplicação, mas há um problema com a aplicação.

Muitas pessoas escrevem pequenos anexos úteis. Mas, até agora, vejo que apenas o fxsaber apresentou uma biblioteca que eu acho que é muito útil para literalmente todos. Não conheço um trabalho tão volumoso, mas de utilidade geral. Neste caso, com Canvas, é ainda mais triste - não consigo imaginar onde tudo isso poderia ser aplicado de uma forma que seria útil para qualquer parte discernível da audiência do fórum.

Eu gostaria de ver exemplos concretos de aplicações, mesmo sem revelar o código fonte - apenas a idéia de onde tudo isso poderia ser aplicado de forma útil ?

 
Nikolai Semko:

O principal problema com este código é que o Cyrillic não é suportado na depuração.


e também Alt+G não funciona (ir para definição de variável).

O problema, Nikolai, não é o código ou o depurador, o problema são as pessoas, as relações. Se eu estiver interessado neste código, substituirei os nomes das variáveis sem muito esforço e a depuração funcionará. Mas exigir o uso de um internacional onde os estrangeiros não conhecem nossa grande língua... E exigindo não baixar e testar este código...

 
Georgiy Merts:

Ha !

Esta é uma desvantagem muito séria deste código "russo"!

Peter, como você depura seu código? Como você vê os valores de variáveis específicas "falantes de russo"?

* * *

Como corretamente apontado acima - existem sistemas HSL e HLS, que há muito foram padronizados, e as transições a partir do RGB são feitas usando fórmulas padrão. Além disso, existe um sistema de laboratório. Para que serve reinventar a roda?

Não está muito claro para mim onde estas funções podem ser aplicadas. Este é um erro muito comum dos programadores locais - eles escrevem programas muito interessantes, mas com a demonstração da aplicação - acertam um obstáculo. Seis meses atrás, eu me lembro, uma classe de trabalho com Canvas foi apresentada - houve uma demonstração muito impressionante. Mas eu não vi nenhum uso para estas características, o autor prometeu demonstrá-las, mas nunca o fez.

Tenho a impressão de que a maioria dessas demonstrações são criadas para divertir o ego - "veja como eu posso fazer isso". Tenho certeza de que é uma coisa boa... mas para a maioria das pessoas é inútil, porque a maioria das pessoas está interessada na aplicação, mas há um problema com a aplicação.

Muitas pessoas escrevem pequenos anexos úteis. Mas, até agora, vejo que apenas o fxsaber apresentou uma biblioteca que eu acho que é muito útil para literalmente todos. Não conheço um trabalho tão volumoso, mas de utilidade geral. Neste caso, com a Tela, é ainda mais triste - não consigo imaginar onde tudo isso poderia ser aplicado de uma forma que seria útil a qualquer parte discernível do fórum.

Eu gostaria de ver exemplos concretos de aplicações, mesmo sem revelar o código fonte - apenas a idéia de onde tudo isso poderia ser aplicado de forma útil ?

George, estou depurando o código em minha cabeça. :) Sempre o fiz dessa maneira. Eu procuro por erros de forma lógica. A função Alerta() me ajuda muito;

Para mim é sempre necessário buscar a própria solução. Não me importo com a falta de depuração do MetaEditor. Adaptei-me a ela e encontrei meus próprios métodos de detecção de erros. Mas em um desenvolvimento global, usar apenas a linguagem de outra (embora muito clara) é uma barreira real. Se você fosse um desenvolvedor global por conta própria, você me entenderia. O idioma russo me ajuda a espremer a máxima produtividade do meu próprio cérebro. Na verdade, eu programo em dois idiomas. 60% russo e 40% inglês. O código bilíngüe é muito mais memorável do que o código monolíngüe. Também é mais fácil de ler. Olhando apenas para o código inglês (com muita sintaxe) você não se lembra de muita coisa e não pode programar muita coisa. É por isso que todos usam bibliotecas. Eu, por outro lado, posso memorizar meu programa facilmente, porque me preocupo com minha própria facilidade de leitura e memorização, em vez de aderir aos padrões inventados por outra pessoa. É por isso que tenho feito tanto por conta própria.

A aplicação de gráficos em programas comerciais os tornará mais atraentes para vender no Mercado. Você tem que cuidar disso também. Essa é a aplicação prática.


Em geral, tabelas, controle do comportamento do programa, criação de automatismos, saída de informações - é para isso que servem os gráficos. É estranho que você pense que os programas comerciais não precisam disso.

 
Nikolai Semko:

O cálculo do gradiente é destacado, o resto da saída está na tela.


Obrigado, Nikolai. É possível enviar uma cor e obter todas as sombras de uma só vez? Existe tal método?

 
Nikolai Semko:

O marcador é destacado para o cálculo do gradiente, o resto da saída está na tela.


A propósito, a julgar pela imagem, a decomposição de cores aqui não está completa. Apenas metade dela. A faixa deve se estender do branco absoluto ao preto absoluto, através de todas as tonalidades de uma determinada cor.

Razão: