Leinwand ist cool! - Seite 47

 
Maxim Kuznetsov:

kein Kreis in einer Ebene, sondern ein Zylinder in 3D :-) Der Kurs wird in einer Spirale herauskommen. Wenn Sie die zylindrischen Koordinaten erfolgreich markieren, ist das eine ziemlich sinnvolle Sache

Möglicherweise.
 
Maxim Kuznetsov:

Dann ist es kein Kreis in der Ebene, sondern ein Zylinder in 3d :-) Der Kurs wird in einer Spirale herauskommen. Wenn Sie die zylindrischen Koordinaten erfolgreich markieren, ist das eine ziemlich sinnvolle Sache

Die Umsetzung ist eigentlich gar nicht so schwierig. 2-5 Zeilen Code zusätzlich. Wenn es kein anderer vor mir tut, werde ich es tun, wenn ich eine freie Minute habe.

Aber es ist besser, einen 4K-Bildschirm zu haben

 
Maxim Kuznetsov:

dann ist es kein Kreis auf einer Ebene, sondern ein Zylinder in 3D :-) Der Kurs wird in einer Spirale herauskommen. Wenn Sie die zylindrischen Koordinaten erfolgreich markieren, ist das eine ziemlich sinnvolle Sache

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

Beachten Sie die Geschwindigkeit und Größe des Codes.
Und das alles ohne Direct X

 
Nikolai Semko:

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

Beachten Sie die Geschwindigkeit und Größe des Codes.
Und das alles ohne Direct X

Magisch!

Wovon hängt der Radius ab?

Ist es schwierig, den Ring mehrfarbig zu gestalten?

Vielleicht wäre diese Visualisierung nützlich, um die besten 50 Durchgänge bei der Optimierung oder die gesamte Optimierung bei der Verdichtung zu bewerten.

 
Nikolai Semko:

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

Beachten Sie die Geschwindigkeit und den Umfang des Codes.
Und das alles ohne Direct X

Ganz einfach: Magie. !!!

Fügt man den Achsen ein polares Gitter und die Möglichkeit hinzu, den Maßstab zu ändern, bis hin zu fast geraden "Parallelen" (und parallelen "Meridianen"), erhält man einen fließenden Übergang zu traditionellen Grafiken.

 
Nikolai Semko:

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

Beachten Sie die Geschwindigkeit und Größe des Codes.
Und das alles ohne Direct X

+++
 

Ich danke Ihnen allen!


Aleksey Vyazmikin:

Es ist magisch!

Wovon hängt der Radius ab?

Ist es schwierig, den Ring mehrfarbig zu gestalten?

Vielleicht wäre diese Visualisierung nützlich, um die besten 50 Durchgänge bei der Optimierung oder die gesamte Optimierung bei der Verdichtung zu bewerten.

Der Code für die 3D-Grafik und die Rotationssteuerung ist in dieser Funktion enthalten:

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

Die Eingabe für diese Funktion ist nur ein Array von Preisen. Selbst ein Schuljunge kann den Code verstehen. Ein eindimensionales Preisfeld wird in ein dreidimensionales Feld von Punkten umgewandelt. In der XY-Ebene wird der Preis im Polarkoordinatensystem dargestellt, wobei der Abstand r=sqrt( x2+y2) zum Mittelpunkt (0,0) der Preiswert ist.

Die Farbauswahl liegt in der Verantwortung dieser Funktion:

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

dessen Eingabe p eine Zahl zwischen 0 und 1 ist und dessen Ausgabe die gewählte Gradientenfarbe ist. Das Gerüst des Farbmusters selbst besteht in diesem Fall aus 6 Farben (Array Col)

Es steht Ihnen frei, auf jede beliebige Art und Weise zu färben

 
Aleksey Panfilov:

Ganz einfach: Magie. !!!

Fügt man den Achsen ein polares Gitter und die Möglichkeit hinzu, den Maßstab zu ändern, bis hin zu fast geraden "Parallelen" (und parallelen "Meridianen"), erhält man einen fließenden Übergang zum traditionellen Diagramm.

Sicher, aber ich möchte den Code nicht mit verschiedenen Skalen überfrachten. In diesem Fall war es für mich wichtig, den Code zu zeigen, der nichts Überflüssiges enthält. Damit es leichter zu verstehen ist.

 
Nikolai Semko:

Sicher, aber ich möchte den Code nicht mit verschiedenen Skalen überfrachten. In diesem Fall war es mir wichtig, den Code ohne alles Überflüssige zu zeigen. Es wäre einfacher, sie zu verstehen.

Nikolay, eine Frage zu Ihrer Bibliothek, wie kann man Daten in den Expert Advisor übernehmen?

 
Martingeil:

Nikolay, eine Frage zu Ihrer Bibliothek, wie kann man Daten in den Expert Advisor übernehmen?

Ich verstehe die Frage nicht. iCanvas ist eine Grafikbibliothek.
Sie fragen sich wahrscheinlich, wie Sie Daten in EA einlesen können, wenn Sie einen Indikator mit Linienvisualisierung über iCanvas erstellen und ihn ohne Puffer lassen? Dann drücken Sie sich bitte deutlicher aus.

Zunächst einmal verbietet Ihnen niemand, Puffer-Indikator-Arrays zu erstellen, wie in einem Standard-Indikator, sondern machen Sie sie einfach INDICATOR_CALCULATIONS und dann auf die Daten durch iCustom in der üblichen Weise.

Zweitens gibt es ein so mächtiges Instrument wie die Ressourcen. Bei den Indikatorpuffern handelt es sich im Wesentlichen um dieselben Ressourcen. In jedem Fall verwenden sie denselben Mechanismus für die Speicherung und den Zugriff auf die Daten.

Umgang mit Ressourcen. Es ist nicht ganz einfach, aber ein wichtiges Instrument für die Datenübertragung. Sie können Ihre eigenen Bibliotheken erstellen, die effizienter sind als die klassischen Pufferarrays.

Ich persönlich verwende meine eigenen Entwicklungen, die ich nicht veröffentliche. Sie sind bequemer und effizienter als der iCustom-Zugang. Alles wird genau über die Ressourcen umgesetzt.