La función de descomponer el color en matices. - página 2

 
Alexey Viktorov:

En el caso de CodeBade, es necesario escribir en un idioma internacional. Pero, ¿por qué insistir en ello en el foro de lengua rusa?

Personalmente estoy disgustado por esta internacional... porque no lo conozco en absoluto y es mucho más claro para mí que nuestro ruso nativo.

El principal problema de este código es que el cirílico no es compatible con la depuración.


y también Alt+G no funciona (ir a la definición de la variable).


 
Y la palabra componente es masculina.
 
Алексей Тарабанов:
Y la palabra componente es masculina.

Y la palabra componente es femenina.

 
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
:

También es muy interesante cómo se resuelve este problema con la clase CCanvas. ¿Cómo se pueden conseguir todos los matices del color original a través de él?

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

El cálculo del gradiente está resaltado, el resto es la salida.


Archivos adjuntos:
Gradient.mq5  4 kb
 
Nikolai Semko:

El principal problema de este código es que el cirílico no es compatible con la depuración.

..

y también Alt+G no funciona (ir a la definición de la variable).

¡Ja!

Este es un inconveniente muy grave de este código "ruso".

Peter, ¿cómo depuras tu código? ¿Cómo se observan los valores de ciertas variables "rusófilas"?

* * *

Como se ha señalado correctamente más arriba, existen los sistemas HSL y HLS, que están estandarizados desde hace mucho tiempo, y las transferencias desde el RGB se realizan mediante fórmulas estándar. Además, ya existe un sistema Lab. ¿Para qué reinventar la rueda?

No tengo muy claro dónde se pueden aplicar estas funciones. Este es un error muy común de los programadores locales - escriben programas muy interesantes, pero con la demostración de la aplicación - se encuentran con un obstáculo. Hace seis meses, recuerdo, se presentó una clase de trabajo con Canvas - hubo una demostración muy impresionante. Pero no he visto ningún uso para estas características, el autor prometió demostrarlas pero nunca lo hizo.

Tengo la impresión de que la mayoría de estas demostraciones se crean para divertir al propio ego: "mira cómo puedo hacerlo". Estoy seguro de que es algo bueno... pero para la mayoría de la gente es inútil, porque la mayoría de la gente está interesada en la aplicación, pero hay un problema con la aplicación.

Mucha gente escribe pequeños anexos útiles. Pero, hasta ahora, veo que sólo fxsaber ha presentado una biblioteca que creo que es muy útil para, literalmente, todo el mundo. No conozco una obra tan voluminosa, pero generalmente útil. En este caso, con Canvas, es aún más triste: no puedo imaginar dónde podría aplicarse todo esto de una manera que fuera útil para cualquier parte discernible de la audiencia del foro.

Me gustaría ver ejemplos concretos de aplicaciones, incluso sin revelar el código fuente, sólo la idea de dónde podría aplicarse todo esto de forma útil...

 
Nikolai Semko:

El principal problema de este código es que el cirílico no es compatible con la depuración.


y también Alt+G no funciona (ir a la definición de la variable).

El problema, Nikolai, no es el código o el depurador, el problema es la gente, las relaciones. Si me interesa este código, reemplazaré los nombres de las variables sin mucho esfuerzo y la depuración funcionará. Pero exigir el uso de una internacional donde los extranjeros no conocen nuestro gran idioma... Y exigiendo no descargar y probar este código...

 
Georgiy Merts:

¡Ja!

Este es un inconveniente muy grave de este código "ruso".

Peter, ¿cómo depuras tu código? ¿Cómo ve los valores de las variables específicas de "habla rusa"?

* * *

Como se ha señalado correctamente más arriba, existen los sistemas HSL y HLS, que están estandarizados desde hace tiempo, y las transiciones desde el RGB se realizan mediante fórmulas estándar. Además, ya existe un sistema Lab. ¿Para qué reinventar la rueda?

No tengo muy claro dónde se pueden aplicar estas funciones. Este es un error muy común de los programadores locales - escriben programas muy interesantes, pero con la demostración de la aplicación - se encuentran con un obstáculo. Hace seis meses, recuerdo, se presentó una clase de trabajo con Canvas - hubo una demostración muy impresionante. Pero no he visto ningún uso para estas características, el autor prometió demostrarlas pero nunca lo hizo.

Tengo la impresión de que la mayoría de estas demostraciones se crean para divertir al propio ego: "mira cómo puedo hacerlo". Estoy seguro de que es algo bueno... pero para la mayoría de la gente es inútil, porque la mayoría de la gente está interesada en la aplicación, pero hay un problema con la aplicación.

Mucha gente escribe pequeños anexos útiles. Pero, hasta ahora, veo que sólo fxsaber ha presentado una biblioteca que creo que es muy útil para, literalmente, todo el mundo. No conozco una obra tan voluminosa, pero generalmente útil. En este caso, con Canvas, es aún más triste: no puedo imaginar dónde podría aplicarse todo eso de forma que fuera útil para alguna parte discernible del foro.

Me gustaría ver ejemplos concretos de aplicaciones, incluso sin revelar el código fuente, sólo la idea de dónde podría ser útil todo esto...

George, estoy depurando el código en mi cabeza. :) Siempre lo he hecho así. Busco los errores mediante un razonamiento lógico. La función Alert() me ayuda mucho;

Para mí siempre es necesario buscar mi propia solución. La falta de depuración de MetaEditor no me molesta. Me he adaptado a ello y he encontrado mis propios métodos de detección de errores. Pero en un desarrollo global utilizar sólo el idioma de otro (aunque sea muy claro) es una verdadera barrera. Si fueras un desarrollador global por tu cuenta, me entenderías. El idioma ruso me ayuda a exprimir al máximo la productividad de mi propio cerebro. De hecho, programo en dos idiomas. 60% en ruso y 40% en inglés. El código bilingüe es mucho más fácil de recordar que el monolingüe. También es más legible. Mirando sólo el código inglés (con mucha sintaxis) no se puede recordar mucho y no se puede programar mucho. Por eso todo el mundo utiliza las bibliotecas. Yo, en cambio, puedo memorizar mi programa con facilidad, porque me importa mi propia facilidad para leer y memorizar, en lugar de ceñirme a las normas inventadas por otros. Por eso he hecho tanto por mi cuenta.

La aplicación de gráficos a los programas comerciales los hará más atractivos para su venta en el Mercado. También tienes que ocuparte de eso. Esa es la aplicación práctica.


En general, las tablas, el control del comportamiento de los programas, la configuración de los automatismos, la salida de información... para eso están los gráficos. Es extraño que pienses que los programas de comercio no lo necesitan.

 
Nikolai Semko:

El cálculo del gradiente está resaltado, el resto de la salida está en la pantalla.


Gracias, Nikolai. ¿Es posible enviar un color y obtener todos los tonos a la vez? ¿Existe tal método?

 
Nikolai Semko:

El marcador está resaltado para el cálculo del gradiente, el resto de la salida está en la pantalla.


Por cierto, a juzgar por la imagen, la descomposición del color aquí no es completa. Sólo la mitad. La gama debe abarcar desde el blanco absoluto hasta el negro absoluto, pasando por todas las tonalidades de un determinado color.

Razón de la queja: