Diskussion zum Artikel "Visualisierung! Eine grafische MQL5 Bibliothek ähnlich 'plot' der Sprache R" - Seite 5

 
Artyom Trishkin #:

Alle Glättungsmethoden sind stark von der Liniendeckkraft abhängig. Bei etwa 50 % Deckkraft wird alles ungleichmäßig und weist Artefakte auf.

Jetzt gibt es Artefakte auch bei vollständig deckenden Linien.

Wir sprachen über den Versuch, einen vollständig opaken Kreis mit geglätteten Kanten (unter Verwendung des Wu-Algorithmus) zu zeichnen, ohne die Glätte zu verlieren.

Dies erfordert spezielle Methoden zum Füllen mit geglätteten Kanten.

 
Anatoli Kazharski #:

Auch bei völlig undurchsichtigen Linien gibt es jetzt Artefakte.

Es ging um den Versuch, einen vollständig undurchsichtigen Kreis mit geglätteten Kanten (unter Verwendung des Wu-Algorithmus) ohne Verlust der Glätte zu zeichnen.

Dies erfordert spezielle Methoden zum Füllen mit geglätteten Kanten.

Ich verstehe, dass Sie das nicht selbst machen können?

 
Artyom Trishkin #:

Mir ist klar, dass ich es nicht alleine schaffe?

Warum eigentlich nicht? Versuchen Sie es doch mal! )

Sie können sogar den von Ihnen erwähnten Fall lösen:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion des Artikels "Visualise it! Grafische Bibliothek in MQL5 als Analogon von plot aus R"

Artyom Trishkin, 2023.07.31 12:39 AM

Alle Glättungsmethoden hängen stark von der Linientransparenz ab. Bei etwa 50% Deckkraft wird alles nicht mehr glatt und es entstehen Artefakte.

Das heißt, dass das Zeichnen auf einer vollständig transparenten Leinwand (CCanvas) unter Berücksichtigung der unteren Ebene (Diagramm und andere Objekte) ohne Artefakte erfolgen kann.

Aber das scheint ziemlich umständlich und schwerfällig zu sein. Es ist auch unklar, wie sehr es die Leistung beeinträchtigen wird. Ich würde mir wünschen, dass die Entwickler des Terminals diesen Fehler noch beheben.

 
Anatoli Kazharski #:

Warum nicht? Versuchen Sie es doch mal! )

Sie könnten sogar den von Ihnen erwähnten Fall lösen:

Das heißt, das Rendering auf einer vollständig transparenten Leinwand (CCanvas) kann unter Berücksichtigung der unteren Ebene (Diagramm und andere Objekte) durchgeführt werden und ist artefaktfrei.

Aber es scheint ziemlich umständlich und schwerfällig zu sein. Es ist auch unklar, wie sehr es die Leistung beeinträchtigen wird. Ich würde mir wünschen, dass die Entwickler des Terminals diesen Fehler noch beheben.

Ich würde eine solche Aufgabe (wenn nicht die Entwickler, sondern die Forumsmitglieder) an Nikolai @Nikolai Semko zur Lösung schicken ;)

 
Artyom Trishkin #:

Ich würde eine solche Aufgabe (wenn nicht Entwickler, sondern Forumsmitglieder) an Nikolai @Nikolai Semko zur Lösung schicken ;)

Er arbeitet mit nur einer Leinwand.

Und ich bin nicht bereit, meine Grafikbibliothek umzuschreiben, damit alles auf einer Leinwand funktioniert.

Es ist zwar interessant, aber da ich weiß, wie viel Zeit es in Anspruch nehmen könnte, kann ich mich im Moment nicht dazu entschließen, eine solche Herausforderung anzunehmen. Ich habe jetzt nicht mehr so viel Zeit wie früher.

 
Anatoli Kazharski #:

Es funktioniert nur mit einer Leinwand.

Und ich bin nicht bereit, meine Grafikbibliothek umzuschreiben, damit alles auf einer Leinwand funktioniert.

Es ist zwar interessant, aber da ich weiß, wie viel Zeit es in Anspruch nehmen könnte, kann ich mich im Moment nicht dazu entschließen, eine solche Herausforderung anzunehmen. Ich habe jetzt nicht mehr so viel Zeit wie früher.

Nun, es ist ein Algorithmus. Was macht das für einen Unterschied - auf einer Leinwand oder auf mehreren?

 
Artyom Trishkin #:

Nun, es ist ein Algorithmus. Was macht es für einen Unterschied, ob er auf einer Leinwand oder auf mehreren ist?

Wir haben zwei Probleme diskutiert:

1. Wenn es das ist, von dem ich ursprünglich gesprochen habe, dann würde eine algorithmische Lösung für einige Fälle ausreichen.

2. Wenn es sich um das von Ihnen erwähnte Problem handelt, dann reichen ein paar Funktionen hier nicht aus. Sie brauchen ein Schema, bei dem alle Ebenen in Arrays gespeichert werden. Jede Ebene sollte unter Berücksichtigung dessen gezeichnet werden, was auf den Ebenen unter ihr gezeichnet wird. Außerdem sollten alle Methoden in der CCanvas-Klasse korrigiert werden. Die Farbe jedes Pixels sollte mit der des darunter liegenden Pixels unter Berücksichtigung der Transparenz gemischt werden. Dann gibt es keine Artefakte (Lücken, gezackte Kanten usw.). Wenn Sie es richtig machen, können Sie die Transparenz mit Unschärfe kombinieren. All dies lässt sich leicht auf einer einzigen Leinwand umsetzen. Wenn jedoch mehrere Leinwände verwendet werden, ist es viel schwieriger zu implementieren.

 
Anatoli Kazharski #:

Es funktioniert nur mit einer Leinwand.

Und ich bin nicht bereit, meine Grafikbibliothek umzuschreiben, damit alles auf einer Leinwand funktioniert.

Es ist zwar interessant, aber da ich weiß, wie viel Zeit es in Anspruch nehmen könnte, kann ich mich im Moment nicht dazu entschließen, eine solche Herausforderung anzunehmen. Ich habe jetzt nicht mehr so viel Zeit wie früher.

Ich benutze eigentlich mehrere Leinwände (normalerweise nicht mehr als 4).
Es gibt immer einen goldenen Mittelweg. Das eine Extrem ist, die gesamte Statik und die gesamte Dynamik auf eine Leinwand zu malen, das andere Extrem ist, alle Objekte als separate Leinwände zu malen.
Es ist wichtig, nicht zu vergessen, dass, wenn Sie zwei Leinwände mit Transparenz haben, überlappen einander, dann immer noch die CPU, (vielleicht in Win10-11 GPU, aber ich denke, immer noch CPU), wird jedes Pixel auch homogenen (nicht-Null-Transparenz) Hintergrund mischen.
Hier können wir von JS die Praxis der Zwischenspeicherung der Leinwand oder einen Teil davon, um die Leistung zu verbessern leihen.
Wie für antialiased Kreise, habe ich bereits eine Variante eines solchen Kreises, die ideal ist (in Bezug auf die Leistung) für Kreise mit Radius weniger als ~ 5 Pixel veröffentlicht. Ich glaube, die Funktion hieß iDot() und befand sich im 3DStars-Code. Sie ist sehr primitiv und kurz (etwa 10 Zeilen Code). Für Kreise mit größerem Radius ist sie in Bezug auf die Leistung alles andere als optimal. Für größere Radien ist die Hochleistungsfunktion bereits über 100 Zeilen Code.
Ja, nachdem ich jahrelang neue neuronale Verbindungen im Gehirn auf Canvas aufgebaut habe, kann ich jetzt eine Bibliothek auf Canvas auf jeder Ebene erstellen. Es gäbe Zeit und Motivation.
Der Wu-Algorithmus gilt als veraltet.
 
Anatoli Kazharski #:

Wir haben zwei Herausforderungen diskutiert:

1. Wenn es sich um die handelt, von der ich ursprünglich sprach, dann würde für einige Fälle eine algorithmische Lösung ausreichen.

2. Wenn es sich um die von Ihnen erwähnte handelt, dann reichen ein paar Funktionen nicht aus. Sie brauchen ein Schema, bei dem alle Ebenen in Arrays gespeichert werden. Jede Ebene sollte unter Berücksichtigung dessen gezeichnet werden, was auf den Ebenen unter ihr gezeichnet wird. Außerdem sollten alle Methoden in der CCanvas-Klasse korrigiert werden. Die Farbe jedes Pixels sollte mit der Farbe des darunter liegenden Pixels unter Berücksichtigung der Transparenz gemischt werden. Dann gibt es keine Artefakte (Lücken, gezackte Kanten usw.). Wenn Sie es richtig machen, können Sie die Transparenz mit Unschärfe kombinieren. All dies lässt sich leicht auf einer einzigen Leinwand umsetzen. Wenn jedoch mehrere Leinwände verwendet werden, ist es viel schwieriger zu implementieren.

Ich dachte, ich würde nur über den Glättungsalgorithmus sprechen. Ohne Rücksicht auf die Überlagerung von transparenten Leinwänden übereinander. Obwohl... Wenn man sie übereinanderlegt, tauchen sicher neue Probleme auf. Deshalb habe ich mich auf Nikolay bezogen - Sie sehen, er hat schon lange alle neuronalen Verbindungen, und sein Gehirn denkt wahrscheinlich schon von selbst und berücksichtigt alle möglichen Probleme mit der Leinwand).

 
Artyom Trishkin #:

Ich dachte, ich würde nur über den Glättungsalgorithmus sprechen. Ohne Bezug auf die Überlagerung von transparenten Leinwänden übereinander. Obwohl... Wenn man sie übereinanderlegt, tauchen sicher neue Probleme auf. Deshalb habe ich mich auf Nikolay bezogen - Sie sehen, er hat schon lange alle neuronalen Verbindungen, und sein Gehirn denkt wahrscheinlich schon von selbst und berücksichtigt alle möglichen Probleme mit der Leinwand).

Artem, das sind wirklich keine trivialen Aufgaben, die neue neuronale Verbindungen erfordern. In SVG gibt es zum Beispiel ein Konzept wie viewBox. Ich habe schon viele Videos darüber gesehen, wie es funktioniert, viel Dokumentation gelesen, viel Code geschrieben, und trotzdem bin ich manchmal ratlos. Ich habe immer noch nicht die notwendigen neuronalen Verbindungen, auch wenn es mehrmals so aussah, als hätte ich alles verstanden.