La funzione di scomporre il colore in sfumature. - pagina 2

 
Alexey Viktorov:

Per CodeBade dovreste sicuramente scrivere in una lingua internazionale. Ma perché insistere in un forum in lingua russa?

Personalmente, sono disgustato da questo internazionale... perché non lo conosco affatto e per me è molto più chiaro del nostro russo nativo.

Il problema principale di questo codice è che il cirillico non è supportato durante il debug.


e anche Alt+G non funziona (vai alla definizione della variabile).


 
E la parola componente è maschile.
 
Алексей Тарабанов:
E la parola componente è maschile.

E la parola componente è femminile.

 
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
:

È anche molto interessante come questo problema viene risolto con la classe CCanvas. Come si possono ottenere tutte le sfumature del colore originale attraverso di esso?

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

Il calcolo del gradiente è evidenziato, il resto è l'output.


File:
Gradient.mq5  4 kb
 
Nikolai Semko:

Il problema principale con tale codice è che il cirillico non è supportato durante il debug.

..

e anche Alt+G non funziona (vai alla definizione della variabile).

Ah!

Questo è un inconveniente molto grave di questo codice "russo"!

Peter, come fai a fare il debug del tuo codice? Come si fa a guardare i valori di certe variabili "russofone"?

* * *

Come giustamente sottolineato sopra - ci sono i sistemi HSL e HLS, che sono stati standardizzati a lungo, e i trasferimenti da RGB sono fatti usando formule standard. Inoltre, c'è un sistema Lab, che senso ha reinventare la ruota?

Non mi è molto chiaro dove queste funzioni possano essere applicate. Questo è un errore molto comune dei programmatori locali - scrivono programmi molto interessanti, ma con la dimostrazione dell'applicazione - incontrano un ostacolo. Sei mesi fa, ricordo, è stata presentata una classe di lavoro con Canvas - c'era una demo molto impressionante. Ma non ho visto alcun uso per queste caratteristiche, l'autore ha promesso di dimostrarle ma non l'ha mai fatto.

Ho l'impressione che la maggior parte di questi demo siano creati per divertire il proprio ego - "guarda come posso farlo". Sono sicuro che è una buona cosa... ma per la maggior parte delle persone è inutile, perché la maggior parte delle persone è interessata all'applicazione, ma c'è un problema con l'applicazione.

Molte persone scrivono piccoli allegati utili. Ma, finora, vedo che solo fxsaber ha presentato una libreria, che penso sia molto utile letteralmente per tutti. Non conosco un'opera così voluminosa, ma generalmente utile. In questo caso, con Canvas, è ancora più triste - non riesco a immaginare dove tutto questo potrebbe essere applicato in un modo che sarebbe utile per qualsiasi parte discernibile del pubblico del forum.

Mi piacerebbe vedere esempi concreti di applicazioni, anche senza rivelare il codice sorgente - solo l'idea di dove tutto questo potrebbe essere utilmente applicato ?

 
Nikolai Semko:

Il problema principale di questo codice è che il cirillico non è supportato durante il debug.


e anche Alt+G non funziona (vai alla definizione della variabile).

Il problema, Nikolai, non è il codice o il debugger, il problema sono le persone, le relazioni. Se sono interessato a questo codice, sostituisco i nomi delle variabili senza molto sforzo e il debug funziona. Ma pretendere di usare una internazionale dove gli stranieri non conoscono la nostra grande lingua... E chiedendo di non scaricare e testare questo codice...

 
Georgiy Merts:

Ah!

Questo è un inconveniente molto grave di questo codice "russo"!

Peter, come fai a fare il debug del tuo codice? Come considera i valori di specifiche variabili "russofone"?

* * *

Come giustamente sottolineato sopra - ci sono i sistemi HSL e HLS, che sono stati standardizzati a lungo, e le transizioni da RGB sono fatte usando formule standard. Inoltre, c'è un sistema Lab, che senso ha reinventare la ruota?

Non mi è molto chiaro dove queste funzioni possano essere applicate. Questo è un errore molto comune dei programmatori locali - scrivono programmi molto interessanti, ma con la dimostrazione dell'applicazione - incontrano un ostacolo. Sei mesi fa, ricordo, è stata presentata una classe di lavoro con Canvas - c'era una demo molto impressionante. Ma non ho visto alcun uso per queste caratteristiche, l'autore ha promesso di dimostrarle ma non l'ha mai fatto.

Ho l'impressione che la maggior parte di questi demo siano creati per divertire il proprio ego - "guarda come posso farlo". Sono sicuro che è una buona cosa... ma per la maggior parte delle persone è inutile, perché la maggior parte delle persone è interessata all'applicazione, ma c'è un problema con l'applicazione.

Molte persone scrivono piccoli allegati utili. Ma, finora, vedo che solo fxsaber ha presentato una libreria, che penso sia molto utile letteralmente per tutti. Non conosco un'opera così voluminosa, ma generalmente utile. In questo caso, con Canvas, è ancora più triste - non riesco a immaginare dove tutto questo potrebbe essere applicato in un modo che sarebbe utile a qualsiasi parte discernibile del forum.

Mi piacerebbe vedere esempi concreti di applicazioni, anche senza rivelare il codice sorgente - solo l'idea di dove tutto questo potrebbe essere utilmente applicato ?

George, sto debuggando il codice nella mia testa. :) Ho sempre fatto così. Cerco gli errori con un ragionamento logico. La funzione Alert() mi aiuta molto;

Per me è sempre necessario cercare la mia soluzione. La mancanza di debug di MetaEditor non mi preoccupa. Mi sono adattato e ho trovato i miei metodi di rilevamento degli errori. Ma in uno sviluppo globale usare solo la lingua di un altro (anche se molto chiara) è una vera barriera. Se tu fossi uno sviluppatore globale per conto tuo, mi capiresti. La lingua russa mi aiuta a spremere la massima produttività dal mio cervello. Infatti, programmo in due lingue. 60% russo e 40% inglese. Il codice bilingue è molto più memorabile di quello monolingue. È anche più leggibile. Guardando solo il codice inglese (con un sacco di sintassi) non si può ricordare molto e non si può programmare molto. Ecco perché tutti usano le biblioteche. Io, d'altra parte, posso memorizzare facilmente il mio programma, perché mi interessa la mia facilità di lettura e memorizzazione, piuttosto che aderire agli standard inventati da qualcun altro. Questo è il motivo per cui ho fatto così tanto per conto mio.

Applicare la grafica ai programmi di trading li renderà più attraenti per la vendita nel Marketplace. Devi occuparti anche di questo. Questa è l'applicazione pratica.


In generale, le tabelle, il controllo del comportamento del programma, l'impostazione di automatismi, l'emissione di informazioni - ecco a cosa serve la grafica. È strano che lei pensi che i programmi di trading non ne abbiano bisogno.

 
Nikolai Semko:

Il calcolo del gradiente è evidenziato, il resto dell'output è sullo schermo.


Grazie, Nikolai. È possibile inviare un colore e ottenere tutte le sfumature in una volta sola? Esiste un tale metodo?

 
Nikolai Semko:

Il marcatore è evidenziato per il calcolo del gradiente, il resto dell'output è sullo schermo.


A proposito, a giudicare dalla foto, la decomposizione del colore qui non è completa. Solo la metà. La gamma dovrebbe estendersi dal bianco assoluto al nero assoluto, attraverso tutte le sfumature di un colore particolare.