Diskussion zum Artikel "MQL5-Handelswerkzeuge (Teil 24): Verbesserte Tiefenwahrnehmung mit 3D-Kurven, Pan-Modus und ViewCube-Navigation"
Derzeit positionieren wir die 3D-Kurvensegmente erst einen Schritt nach dem Rendern der Szene, sodass sie im ersten statischen Bild noch nicht an der richtigen Stelle sind. Führen Sie einfach einmal eine Drehbewegung (Linksklick und Ziehen) oder eine Zoom-Geste (Scrollrad) über die Arbeitsfläche aus – dadurch wird ein erneutes Rendern erzwungen und die Kurve wird angezeigt.
Wenn du möchtest, dass die Kurve sofort gerendert wird, sobald du in die 3D-Ansicht wechselst, verschiebe einfach die Funktion zum Rendern der Kurve vor den Render-Aufruf. Siehe unten:
Vorher:
//+------------------------------------------------------------------+ //| Die 3D-Szene rendern und 2D-UI-Elemente darüberlegen | //+------------------------------------------------------------------+ void render3DVisualization() { //--- Abbruch, falls die Daten nicht geladen wurden if(!m_isDataLoaded) return; //--- Die Ansichts- und Lichttransformationen für dieses Bild neu berechnen updateCameraPosition(); //--- Alle 3D-Histogrammbalken entsprechend den aktuellen Daten neu positionieren update3DHistogramBars(); //--- Die konfigurierte Hintergrundfarbe für den „Clear“-Durchlauf verwenden color bgColor = backgroundTopColor; uint bgColorArgb = ColorToARGB(bgColor, 255); //--- Farb- und Tiefenpuffer löschen, anschließend die 3D-Szene rendern m_mainCanvas.Render(DX_CLEAR_COLOR | DX_CLEAR_DEPTH, bgColorArgb); //--- Den 2D-Rahmen über das 3D-Rendering legen if(showBorderFrame) draw3DBorder(); //--- Die Kopfzeile über das gerenderte 3D-Bild legen drawHeaderBarOn3D(); //--- Das Statistikfenster und die Legende einblenden, sofern aktiviert if(showStatistics) { drawStatisticsPanelOn3D(); drawLegendOn3D(); } //--- Alle PMF-Kurvenrohrsegmente für diesen Frame neu positionieren update3DCurveSegments(); // THIS IS AFTER THE SCENE RENDERS, SO THE 3D SEGMENTS DELAY RENDERING UNTIL INTERACTION. SEE THE CANVAS RENDER ABOVE IN YELLOW //--- Das Symbol für den Umschaltknopf des Schwenkmodus zeichnen drawPanIconOverlay(); //--- Das interaktive View-Cube-Widget zeichnen drawViewCubeOverlay(); //--- Die Anzeige für den Größenänderungsgriff beim Überfahren mit der Maus zeichnen if(m_isHoveringResizeZone && enableResizing) drawResizeIndicatorOn3D(); //--- Den Pixelpuffer an das Diagrammobjekt übergeben m_mainCanvas.Update(); }
Nachher:
//+------------------------------------------------------------------+ //| Die 3D-Szene rendern und 2D-UI-Elemente darüberlegen | //+------------------------------------------------------------------+ void render3DVisualization() { //--- Abbruch, falls die Daten nicht geladen wurden if(!m_isDataLoaded) return; //--- Die Ansichts- und Lichttransformationen für dieses Bild neu berechnen updateCameraPosition(); //--- Alle 3D-Histogrammbalken entsprechend den aktuellen Daten neu positionieren update3DHistogramBars(); //--- Alle PMF-Kurvenrohrsegmente VOR dem Rendern neu positionieren update3DCurveSegments(); // JUST MOVE THE FUNCTION BEFORE THE 3D RENDER FOR INSTANT RENDERING, TO BE COUPLED WITH THE 3D BARS //--- Die konfigurierte Hintergrundfarbe für den „Clear“-Durchlauf verwenden color bgColor = backgroundTopColor; uint bgColorArgb = ColorToARGB(bgColor, 255); //--- Farb- und Tiefenpuffer löschen, anschließend die 3D-Szene rendern m_mainCanvas.Render(DX_CLEAR_COLOR | DX_CLEAR_DEPTH, bgColorArgb); //--- Den 2D-Rahmen über das 3D-Rendering legen if(showBorderFrame) draw3DBorder(); //--- Die Kopfzeile über das gerenderte 3D-Bild legen drawHeaderBarOn3D(); //--- Das Statistikfenster und die Legende einblenden, sofern aktiviert if(showStatistics) { drawStatisticsPanelOn3D(); drawLegendOn3D(); } //--- Das Symbol für den Umschaltknopf des Schwenkmodus zeichnen drawPanIconOverlay(); //--- Das interaktive View-Cube-Widget zeichnen drawViewCubeOverlay(); //--- Die Anzeige für den Größenänderungsgriff beim Überfahren mit der Maus zeichnen if(m_isHoveringResizeZone && enableResizing) drawResizeIndicatorOn3D(); //--- Den Pixelpuffer an das Diagrammobjekt übergeben m_mainCanvas.Update(); }
Danke, dass du das bemerkt hast. Ich hoffe, das hilft weiter. Danke.
Derzeit werden die Segmente der 3D-Kurve einen Schritt später platziert, als die Szene gerendert wird, weshalb sie im ersten statischen Bild noch nicht zu sehen sind. Führen Sie einfach einmal eine Drehung (Ziehen mit der linken Maustaste) oder eine Skalierung (mit dem Scrollrad) über der Leinwand durch – dies löst ein erneutes Rendern aus, und die Kurve wird angezeigt.
Wenn Sie möchten, dass die Kurve beim Wechsel in den 3D-Modus sofort gerendert wird, verschieben Sie die Funktion zum Rendern der Kurve einfach vor den Renderaufruf. Siehe unten:
Vorher:
Nachher:
Vielen Dank für den Hinweis. Ich hoffe, das hilft weiter. Vielen Dank.
Genauer gesagt, haben Sie mich falsch verstanden.
Sie haben keine 3D-Kurven, sondern nur 2D-Kurven. Es ist wichtig, die korrekte Terminologie zu verwenden, insbesondere in Artikeln.
Hier ist ein Beispiel für eine 3D-Kurve. Wenn sich eine Kurve im dreidimensionalen Raum befindet, ergibt die Projektion einer solchen Kurve auf eine beliebige Ebene niemals eine gerade Linie, wie in Ihrem Fall.
Du hast mich nicht verstanden.
Oder besser gesagt: Du hast mich nicht richtig verstanden.
Du hast keine 3D-Kurven, sondern nur 2D-Kurven. Es ist wichtig, die korrekte Terminologie zu verwenden, insbesondere in Artikeln.
Hier ist ein Beispiel für eine 3D-Kurve. Befindet sich eine Kurve im dreidimensionalen Raum, ergibt die Projektion einer solchen Kurve auf eine beliebige Ebene niemals eine Gerade, wie in deinem Fall
Jetzt verstehe ich, was du meinst. Einverstanden; du hast Recht, was die Terminologie angeht. Streng genommen handelt es sich um eine ebene Kurve (festes Z; nur die Anzahl der Erfolge und die Wahrscheinlichkeit variieren), es ist also keine 3D-Kurve im eigentlichen Sinne, und ich verstehe deinen Einwand.
Die Absicht war, die PMF als reales Objekt in der 3D-Szene darzustellen; drehbar, mit Röhrengeometrie, neben den 3D-Histogrammbalken platziert, sodass sie beim Rendern mit diesen ausgerichtet bleibt und man beide gemeinsam im selben Raum verfolgen kann. „3D“ war also im Sinne einer Darstellung in der 3D-Ansicht gemeint und nicht als echte Raumkurve. Danke für den Hinweis.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel MQL5-Handelswerkzeuge (Teil 24): Verbesserte Tiefenwahrnehmung mit 3D-Kurven, Pan-Modus und ViewCube-Navigation :
Nutzen Sie diese räumlich präzise dargestellte Kurve im Handel zusammen mit dem Histogramm, um zu beurteilen, ob die Spitze der PMF mit dem Bin der höchsten Frequenz übereinstimmt, was auf ein gut kalibriertes Modell hindeutet. Richten Sie den Fokus zunächst auf die Verteilungsschwänze mit geringer Wahrscheinlichkeit, um diese genauer zu untersuchen, bevor Sie Positionen in der Nähe der Extremwerte festlegen. Verwenden Sie die Draufsicht des ViewCubes, um die Barhöhen aller Bins gleichzeitig zu vergleichen, und die Vorderansicht, um die Werte der einzelnen Bars übersichtlich abzulesen.
Wir werden das Tool erweitern, indem wir boxbasierte Kurvensegmente erstellen, die so skaliert und gedreht werden, dass sie eine durchgehende Röhre bilden. Außerdem werden wir eine Pan-Logik unter Verwendung kamerarelativer Vektorberechnungen implementieren und den ViewCube mit projizierten Scheitelpunkten, Flächensortierung für die korrekte Zeichenreihenfolge sowie bilinearer Interpolation für unterteilte Hover-Zonen rendern. Außerdem werden wir zeitgesteuerte Animationen für Ansichtsübergänge, überblendete Pixel-Overlays für Symbole und den Würfel sowie die Ereignisbehandlung für Klicks und Hover-Ereignisse integrieren, um die Benutzeroberfläche vollständig responsiv zu gestalten. Werfen Sie unten einen Blick auf unsere Ziele.
Autor: Allan Munene Mutiiria