La tela è forte! - pagina 47

 
Maxim Kuznetsov:

non un cerchio su un piano, ma un cilindro in 3d :-) Il corso uscirà in una spirale. Se riuscite a segnare le coordinate cilindriche, è una cosa abbastanza sensata

Possibilmente.
 
Maxim Kuznetsov:

Allora non un cerchio sul piano, ma un cilindro in 3d :-) Il corso uscirà in una spirale. Se riuscite a segnare le coordinate cilindriche, è una cosa abbastanza sensata

In realtà non è così difficile da implementare. 2-5 righe di codice in più. Se nessun altro lo fa prima di me, quando ho un minuto libero, lo faccio io.

Ma è meglio avere uno schermo 4K

 
Maxim Kuznetsov:

quindi non un cerchio su un piano, ma un cilindro in 3d :-) Il corso uscirà in una spirale. Se riuscite a segnare le coordinate cilindriche, è una cosa abbastanza sensata

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

Notate la velocità e la dimensione del codice.
E tutto questo senza Direct X

 
Nikolai Semko:

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

Notate la velocità e la dimensione del codice.
E tutto questo senza Direct X

Magico!

Da cosa dipende il raggio?

È difficile fare l'anello multicolore?

Forse questa visualizzazione sarebbe utile per valutare i migliori 50 passaggi nell'ottimizzazione, o l'intera ottimizzazione nella compattazione.

 
Nikolai Semko:

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

Notate la velocità e la dimensione del codice.
E tutto questo senza Direct X

Semplicemente, magia. !!!

E se si aggiunge una griglia polare all'asse, e la possibilità di cambiare la scala, fino a "paralleli" quasi rettilinei (e "meridiani" paralleli), si ottiene una transizione morbida alla grafica tradizionale.

 
Nikolai Semko:

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

Notate la velocità e la dimensione del codice.
E tutto questo senza Direct X

+++
 

Grazie a tutti!


Aleksey Vyazmikin:

È magico!

Da cosa dipende il raggio?

È difficile fare l'anello multicolore?

Forse questa visualizzazione sarebbe utile per valutare i migliori 50 passaggi durante l'ottimizzazione, o l'intera ottimizzazione durante la compattazione.

Il codice per questa grafica 3D e il controllo della rotazione sta tutto in questa funzione:

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

L'input di questa funzione è solo un array di prezzi. Anche uno scolaro può capire il codice. Un array unidimensionale di prezzi viene convertito in un array tridimensionale di punti. Nel piano XY il prezzo è rappresentato nel sistema di coordinate polari, dove la distanza r=sqrt( x2+y2) dal centro (0,0) è il valore del prezzo.

La selezione del colore è responsabilità di questa funzione:

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

il cui input p è un numero da 0 a 1, e la cui uscita è il colore del gradiente selezionato. Lo scheletro del modello di colore stesso in questo caso consiste di 6 colori (array Col)

Siete liberi di colorare in qualsiasi modo e in qualsiasi modo vogliate

 
Aleksey Panfilov:

Semplicemente, magia. !!!

E se aggiungiamo una griglia polare all'asse, e la possibilità di cambiare la scala, fino a "paralleli" quasi dritti (e "meridiani" paralleli), otteniamo una transizione morbida al grafico tradizionale.

Certo, ma non voglio ingombrare il codice con diverse scale. In questo caso era importante per me mostrare il codice che non contiene nulla di superfluo. In modo che sia più facile capirlo.

 
Nikolai Semko:

Certo, ma non voglio ingombrare il codice con diverse scale. In questo caso, era importante per me mostrare il codice senza nulla di superfluo. Sarebbe più facile capirlo.

Nikolay, una domanda sulla tua libreria, come prendere i dati nell'Expert Advisor?

 
Martingeil:

Nikolay, una domanda sulla tua libreria, come prendere i dati nell'Expert Advisor?

Non capisco la domanda: iCanvas è una libreria grafica.
Probabilmente stai chiedendo come leggere i dati nell'EA se crei un indicatore con visualizzazione di linee tramite iCanvas e lo lasci senza buffer? Allora, per favore, esprimiti più chiaramente.

Prima di tutto, nessuno vi proibisce di creare array di indicatori buffer, come in un indicatore standard, ma semplicemente renderli INDICATOR_CALCULATIONS e poi accedere ai dati attraverso iCustom nel solito modo.

In secondo luogo, c'è uno strumento così potente, come le risorse. I buffer degli indicatori sono essenzialmente le stesse risorse. Comunque, usano lo stesso meccanismo di memorizzazione e di accesso ai dati.

Trattare con le risorse. Non è molto semplice, ma è uno strumento importante per il trasferimento dei dati. Potete creare le vostre librerie che sono più efficienti dei classici array di buffer.

Personalmente, uso i miei sviluppi, che non pubblico. Sono più convenienti ed efficienti dell'accesso iCustom. Tutto è implementato esattamente attraverso le risorse.

Motivazione: