El lienzo es genial. - página 47

 
Maxim Kuznetsov:

no un círculo en un plano, sino un cilindro en 3d :-) El curso saldrá en espiral. Si se marcan con éxito las coordenadas cilíndricas, es algo bastante sensato

Posiblemente.
 
Maxim Kuznetsov:

Entonces no es un círculo en el plano, sino un cilindro en 3d :-) El curso saldrá en espiral. Si se marcan con éxito las coordenadas cilíndricas, es algo bastante sensato

En realidad, no es nada difícil de aplicar. 2-5 líneas de código adicionales. Si nadie lo ha hecho antes que yo, cuando tenga un minuto libre, lo haré.

Pero es mejor tener una pantalla 4K

 
Maxim Kuznetsov:

entonces no es un círculo en un plano, sino un cilindro en 3d :-) El curso saldrá en espiral. Si se marcan con éxito las coordenadas cilíndricas, es algo bastante sensato

https://www.mql5.com/en/code/27662

Observe la velocidad y el tamaño del código.
Y todo ello sin Direct X

 
Nikolai Semko:

https://www.mql5.com/en/code/27662

Observe la velocidad y el tamaño del código.
Y todo ello sin Direct X

¡Mágico!

¿De qué depende el radio?

¿Es difícil hacer el anillo multicolor?

Tal vez esta visualización sea útil para evaluar las 50 mejores pasadas en la optimización, o toda la optimización en la compactación.

 
Nikolai Semko:

https://www.mql5.com/en/code/27662

Observe la velocidad y el tamaño del código.
Y todo ello sin Direct X

Sencillamente, magia. ¡¡¡!!!

Y si se añade una rejilla polar al eje, y la posibilidad de cambiar la escala, hasta llegar a los "paralelos" casi rectos (y a los "meridianos" paralelos), se consigue una transición suave a los gráficos tradicionales.

 
Nikolai Semko:

https://www.mql5.com/en/code/27662

Observe la velocidad y el tamaño del código.
Y todo ello sin Direct X

+++
 

Gracias a todos.


Aleksey Vyazmikin:

Es mágico.

¿De qué depende el radio?

¿Es difícil hacer el anillo multicolor?

Tal vez esta visualización sea útil para evaluar las 50 mejores pasadas durante la optimización, o toda la optimización durante la compactación.

El código para este control de rotación y gráficos 3D cabe todo en esta función:

void Draw(double &c[]) {
   double _r=_Height/2-7;
   int Per=int(2*M_PI*_r);
   int X=_Width/2;
   int Y=_Height/2-5;
   double K=10*_Height;
   Canvas.Erase(0xFF000000);
   int Size =ArraySize(c);
   double max = c[ArrayMaximum(c,0)];
   double min = c[ArrayMinimum(c,0)];
   if (max-min<=0) return;
   double _a=2*M_PI/per*(_Width/2  - _MouseX + 5*per); // угол камеры по горизонтали (_MouseX  - текущая координата X указателя мышки)
   double _b=2*M_PI/per*(_Height/2 - _MouseY + 5*per); // угол камеры по вертикали   (_MouseY  - текущая координата Y указателя мышки)
   for (int i=0; i<Size; i++) {
      double r = _r*(0.3+0.7*(c[i]-min)/(max-min));
      double a = 2*M_PI/per*i;
      double z =r -r*2*double(i)/Size;
      double x = cos(a)*r;
      double y = sin(a)*r;
      double R=sqrt(x*x+y*y+z*z);
      double x1=x*cos(_a)+z*sin(_a);
      double z1=-x*sin(_a)+z*cos(_a);
      double y1=y*cos(_b)+z1*sin(_b);
      double z2=-y*sin(_b)+z1*cos(_b);
      z2=z2+_r;
      x=X+K*x1/(z2+K);
      y=Y+K*y1/(z2+K);
      _PixelSet((int)x,(int)y,Grad(double(i)/Size));
   }
   Canvas.Update();
}

La entrada de esta función es sólo una matriz de precios. Hasta un escolar puede entender el código. Una matriz de precios unidimensional se convierte en una matriz tridimensional de puntos. En el plano XY el precio se representa en el sistema de coordenadas polares, donde la distancia r=sqrt( x2+y2) al centro (0,0) es el valor del precio.

La selección del color es responsabilidad de esta función:

uint Grad(double p) {
   static uint Col[6]= {0xFF0000FF,0xFFFF00FF,0xFFFF0000,0xFFFFFF00,0xFF00FF00,0xFF00FFFF};
   if(p>0.9999) return Col[5];
   if(p<0.0001) return Col[0];
   p=p*5;
   int n=(int)p;
   double k=p-n;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+1];
   return ARGB(255,c1.c[2]+uchar(k*(c2.c[2]-c1.c[2])+0.5),
               c1.c[1]+uchar(k*(c2.c[1]-c1.c[1])+0.5),
               c1.c[0]+uchar(k*(c2.c[0]-c1.c[0])+0.5));
}

cuya entrada p es un número de 0 a 1, y cuya salida es el color de degradado seleccionado. El esqueleto del patrón de color propiamente dicho consta en este caso de 6 colores (matriz Col)

Eres libre de colorear como quieras y de la forma que quieras

 
Aleksey Panfilov:

Sencillamente, magia. ¡¡¡!!!

Y si añadimos una cuadrícula polar al eje, y la posibilidad de cambiar la escala, hasta llegar a los "paralelos" casi rectos (y los "meridianos" paralelos), obtenemos una transición suave al gráfico tradicional.

Claro, pero no quiero saturar el código con diferentes escalas. En este caso era importante para mí mostrar el código que no contiene nada superfluo. Para que sea más fácil entenderlo.

 
Nikolai Semko:

Claro, pero no quiero saturar el código con diferentes escalas. En este caso, era importante para mí mostrar el código sin nada superfluo. Sería más fácil entenderlo.

Nikolay, una pregunta sobre su biblioteca, ¿cómo tomar los datos en el Asesor de Expertos?

 
Martingeil:

Nikolay, una pregunta sobre su biblioteca, ¿cómo tomar los datos en el Asesor de Expertos?

No entiendo la pregunta. iCanvas es una biblioteca de gráficos.
Seguramente te estás preguntando cómo leer los datos en el EA si creas un indicador con visualización de líneas a través de iCanvas y lo dejas sin buffer. Entonces, por favor, exprésate con más claridad.

En primer lugar, nadie le prohíbe crear matrices de indicadores de búfer, como en un indicador estándar, sino que simplemente los hace INDICATOR_CALCULATIONS y luego accede a los datos a través de iCustom de la manera habitual.

En segundo lugar, existe una herramienta tan poderosa como los recursos. Los topes indicadores son esencialmente los mismos recursos. De todos modos, utilizan el mismo mecanismo de almacenamiento y acceso a los datos.

Trata de los recursos. No es muy sencillo, pero es una herramienta importante para la transferencia de datos. Puedes crear tus propias librerías, que son más eficientes que las clásicas matrices de búfer.

Personalmente, utilizo mis propios diseños, que no publico. Son más cómodos y eficaces que el acceso iCustom. Todo se aplica exactamente a través de los recursos.