Diskussion zum Artikel "Die benutzerdefinierten Indikatoren und die Informationsgrafik in CCanvas"

 

Neuer Artikel Die benutzerdefinierten Indikatoren und die Informationsgrafik in CCanvas :

Im Artikel werden die neuen Arten der Indikatoren mit einer komplizierteren strukturellen Realisierung betrachtet. Es werden der Aufbau der pseudoräumlichen Typen der Indikatoren und die Erstellung einer dynamisch ändernden Informationsgrafik beschrieben.

Jedoch die Pyramide — keine flache Figur, deshalb bei ihrem Aufbau im gegebenen zweidimensionalen Koordinatensystem verwenden wir ihre isometrische Projektion. Die grundlegende Struktur unterscheidet sich nicht durch die große Anzahl der Elemente (die Abb. 14), aber nichtsdestoweniger, die Art des Aufbaues der Pyramide-Projektion und ihre Visualisierung — ist der Hauptteil der Realisierung dieser Klasse.


in Abb.14. Die grundlegende Struktur der Klasse CPyramid.

Autor: Alexander Fedosov

 

Das ist cool, aber es gibt überhaupt kein Anti-Aliasing. Das Zeichnen mit Pixelquadraten ist nicht mehr zeitgemäß.

Hier ist ein Beispiel, das zeigt, dass Antialiasing in der Natur existiert:


 
Nikolai Semko:

Das ist cool, aber es gibt überhaupt kein Anti-Aliasing. Das Zeichnen mit Pixelquadraten ist nicht mehr zeitgemäß.

Hier ist ein Beispiel, das zeigt, dass Antialiasing in der Natur existiert:


Und der Code?

 
Rashid Umarov:

Und der Code?


Gern geschehen:

#property copyright   "2009-2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property description "Demonstrating Canvas features"
#property script_show_inputs 
//---
#include <Canvas\CanvasPro.mqh>
//+------------------------------------------------------------------+
//| Eingaben|
//+------------------------------------------------------------------+
input int pause = 20;   // Verzögerung in Millisekunden zwischen den Ausgaben auf dem Bildschirm
input bool top = false; // unter das Diagramm zeichnen?
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Farbverarbeitungsmethode
input int Ncirl =30;    // Anzahl der Kreise
input int MaxSizeCircle = 200; // maximale Größe der Kreise
//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
int OnStart(void)
  {

   double r1[],r2[],k1[],k2[];
   int x[],y[];
   uint col[];
   int j=0;
   ArrayResize(r1,Ncirl);
   ArrayResize(r2,Ncirl);
   ArrayResize(k1,Ncirl);
   ArrayResize(k2,Ncirl);
   ArrayResize(x,Ncirl);
   ArrayResize(y,Ncirl);
   ArrayResize(col,Ncirl);
   
   ChartSetInteger(0,CHART_FOREGROUND,top);
   int Width =(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);  // Fensterbreite ermitteln
   int Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // Ermitteln der Fensterhöhe
   uint ColorScreen=(color)ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);// Hintergrundfarbe des Fensters ermitteln

   CCanvasPro canvas;
   if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,format))
     {
      Print("Error creating canvas: ",GetLastError());
      return(-1);
     }
   canvas.SetBack(false);
   canvas.Erase(ColorScreen);
   canvas.Update();
   srand(GetTickCount());
   for(int i=0;i<Ncirl;i++)
     {
      x[i]=rand()%Width;
      y[i]=rand()%Height;
      r1[i]=rand()%MaxSizeCircle;
      r2[i]=rand()%MaxSizeCircle;
      k1[i]=(double)(rand()%10)/1000;
      k2[i]=(double)(rand()%10)/1000;
      col[i]=XRGB(rand()%255,rand()%255,rand()%255);
     }
   while(!IsStopped())
     {
      canvas.Erase(ColorScreen);
      for(int i=0;i<Ncirl;i++) canvas.CircleSS(x[i],y[i],r1[i]*fabs(sin(j*k1[i])),r2[i]*fabs(sin(j*k2[i])),col[i]);
      Sleep(pause);
      canvas.Update();
      j++;
     }

   ObjectDelete(0,"SampleCanvas");
   canvas.Destroy();
   return(0);
  }
Dateien:
 
Rashid Umarov:

Und der Code?


Der Standard cCanvas hat bereits mehrere Glättungsmethoden für alle Formen, richtig?

 
Andrey Barinov:

Der Standard cCanvas hat bereits mehrere Glättungsmethoden für alle Formen.

Leider. Selbst die letzte Kreisfunktion, die auf der Wu-Methode basiert, enthält Fehler und führt zu einem merklichen Fehler bei der Glättung an diagonalen Stellen des Kreises, da diese Methode sehr primitiv ist und in Bezug auf die Geschwindigkeit sehr suboptimal ist. Außerdem gibt es die geglätteten gefüllten Formen einfach nicht.
 
Nikolai Semko:
Leider. Selbst die letzte Kreisfunktion, die auf der Wu-Methode basiert, enthält Fehler und führt aufgrund der Primitivität dieser Methode zu einem deutlichen Fehler bei der Glättung an diagonalen Stellen des Kreises und ist in Bezug auf die Geschwindigkeit sehr suboptimal. Besonders geglättete gefüllte Formen gibt es einfach nicht.
Nun, dann kann ich mich der Frage nur anschließen.

Und der Code?
 
Rashid Umarov:

Und der Code?

Andrey Barinov:
Nun, dann kann ich mich der Frage nur anschließen.

Und der Code?

Es ist seltsam, warum Sie mir diese Frage stellen. Ich arbeite nicht bei Metaquotes, obwohl ich davon träume, dort zu arbeiten. Wenn ich in diesem Unternehmen arbeiten würde, könnte ich diese Frage gut bearbeiten, und zwar nicht nur die Frage der Glättung in der CCanvas-Bibliothek, sondern zum Beispiel auch vollwertige 3D-Funktionen in Canvas.
Aber jetzt habe ich nur Experimente, die ich auf meinen Knien gemacht habe und die ich mich nicht traue zu veröffentlichen, weil ich weiß, dass ich es besser machen kann, aber es braucht Zeit.

Ich verstehe wirklich nicht, warum alle Realisierungen mit Hilfe von Canvas (in diesem Artikel oder z.B. hier) ohne Glättung umgesetzt werden. Immerhin muss man zugeben, dass es dem Auge wegen der Pixelsäge auffällt und wie viel cooler es mit dem Einsatz von Antialiasing aussehen würde. Gehen Sie auf eine beliebige Website, schauen Sie auf Ihrem iPhone oder Android-Gerät nach, dort gibt es runde oder geschwungene Tasten. Werden Sie dort Kreise ohne Antialiasing finden? Aber warum gibt es immer noch keine vollwertige Implementierung der Glättung in MQL5, der Sprache, die den Anspruch erhebt, einen Platz an der Sonne einzunehmen. Liege ich da falsch? Deshalb habe ich dieses Thema gestartet und dieses Beispiel gepostet, um zu zeigen, dass daran nichts Übernatürliches ist:
Dateien:
 
Nikolai Semko:

Es ist merkwürdig, warum Sie mir diese Frage stellen. Ich arbeite nicht für Metaquotes, obwohl ich davon träume, dort zu arbeiten. Wenn ich in diesem Unternehmen arbeiten würde, könnte ich gut an diesem Thema arbeiten, und nicht nur am Thema Anti-Aliasing in der CCanvas-Bibliothek, sondern zum Beispiel auch an vollen 3D-Funktionen in Canvas.
Aber jetzt sind es nur Experimente, die ich auf meinen Knien zusammengebaut habe, und ich habe Angst, sie zu veröffentlichen, weil ich weiß, dass ich es besser machen kann, aber es braucht Zeit.

Machen Sie die Arbeit, schreiben Sie einen Artikel. Und Sie werden dafür bezahlt und es wird nützlich sein.
 

Zum 10. Mal wird das Thema als ungelesen markiert, obwohl es keine Änderungen oder neuen Beiträge gibt.

Macht da jemand Mist oder hat das Forum eine Fehlfunktion?

 
Andrey Khatimlianskii:

Zum 10. Mal wird das Thema als ungelesen markiert, obwohl es keine Änderungen oder neuen Beiträge gibt.

Macht da jemand Mist oder hat das Forum eine Fehlfunktion?


Ich habe den Verdacht, dass der Autor (Verfasser?) seinen Beitrag bearbeitet.

Eine andere Möglichkeit: Jemand hat angefangen, einen Beitrag zu schreiben und aufgehört, jetzt hängt dieser Beitrag im Bearbeitungsmodus, und das Forum stellt jede Minute (5, 10 Minuten?) fest, dass sich im Thema etwas tut.