Discussion de l'article "Visualisez le ! Bibliothèque graphique MQL5 similaire à 'plot' du langage R" - page 5

 
Artyom Trishkin #:

Toutes les méthodes de lissage dépendent fortement de l'opacité des lignes. À une opacité d'environ 50 %, tout devient non lissé et présente des artefacts.

Aujourd'hui, il y a des artefacts même avec des lignes totalement opaques.

Nous parlions d'essayer de dessiner un cercle entièrement opaque avec des bords lissés (en utilisant l'algorithme de Wu) sans perdre la fluidité.

Cela nécessite des méthodes spéciales de remplissage avec des bords lissés.

 
Anatoli Kazharski #:

Il y a maintenant des artefacts même avec des lignes complètement opaques.

Il s'agissait d'essayer de dessiner un cercle complètement opaque avec des bords lissés (en utilisant l'algorithme de Wu) sans perte de fluidité.

Cela nécessite des méthodes spéciales de remplissage avec des bords lissés.

J'ai cru comprendre que vous ne pouviez pas le faire vous-même ?

 
Artyom Trishkin #:

Je me rends compte que je ne peux pas le faire tout seul ?

Pourquoi ne pas le faire ? Essayez donc ! )

Vous pouvez même résoudre le cas que vous avez mentionné :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Discussion autour de l'article "Visualisez-le ! Bibliothèque graphique en MQL5 comme analogue de plot de R"

Artyom Trishkin, 2023.07.31 12:39 AM

Toutes les méthodes de lissage dépendent fortement de l'opacité des lignes. À environ 50 % d'opacité, tout devient non lisse et présente des artefacts.

En d'autres termes, il est possible de dessiner sur un canevas entièrement transparent (CCanvas) en tenant compte de la couche inférieure (graphique et autres objets) et il n'y aura pas d'artefacts.

Mais cela semble plutôt difficile et encombrant. On ne sait pas non plus dans quelle mesure cela affectera les performances. J'aimerais quand même que les développeurs du terminal corrigent ce bug.

 
Anatoli Kazharski #:

Pourquoi ne pas le faire ? Essayez donc ! )

Vous pouvez même résoudre l'affaire que vous avez mentionnée :

Le rendu sur un canevas entièrement transparent (CCanvas) peut être effectué en tenant compte de la couche inférieure (graphique et autres objets) et sera exempt d'artefacts.

Mais cela semble plutôt compliqué et encombrant. On ne sait pas non plus dans quelle mesure cela affectera les performances. J'aimerais quand même que les développeurs du terminal corrigent ce bogue.

J'enverrais une telle tâche (pas aux développeurs, mais aux membres du forum) à Nikolai @Nikolai Semko pour qu'il trouve une solution ;)

 
Artyom Trishkin #:

J'enverrais une telle tâche (si ce ne sont pas les développeurs, mais les membres du forum) à Nikolai @Nikolai Semko pour qu'il la résolve ;)

Il travaille avec un seul canevas.

Et je ne suis pas prêt à réécrire ma bibliothèque graphique pour que tout fonctionne sur un seul canevas.

Bien que ce soit intéressant, mais sachant combien de temps cela peut prendre, je ne peux pas décider d'entreprendre un tel défi pour le moment. Je n'ai plus autant de temps qu'avant.

 
Anatoli Kazharski #:

Il ne fonctionne qu'avec une seule toile.

Et je ne suis pas prêt à réécrire ma bibliothèque graphique pour que tout fonctionne sur un seul canevas.

Bien que ce soit intéressant, mais sachant combien de temps cela pourrait prendre, je ne peux pas décider d'entreprendre un tel défi pour le moment. Je n'ai plus autant de temps qu'avant.

Il s'agit d'un algorithme. Quelle différence cela fait-il - sur une toile ou sur plusieurs ?

 
Artyom Trishkin #:

Il s'agit d'un algorithme. Quelle différence cela fait-il qu'il soit sur une ou plusieurs toiles ?

Nous avons abordé deux problèmes :

1. Si c'est celui dont je parlais à l'origine, alors une solution algorithmique serait suffisante dans certains cas.

2. S'il s'agit de celui que vous avez mentionné, alors quelques fonctions ne suffiront pas. Vous avez besoin d'un schéma dans lequel toutes les couches sont stockées dans des tableaux. Chaque couche doit être dessinée en tenant compte de ce qui est dessiné sur les couches inférieures. En outre, toutes les méthodes de la classe CCanvas doivent être corrigées. La couleur de chaque pixel doit être mélangée avec celle du pixel inférieur, en tenant compte de la transparence. Ainsi, il n'y aura pas d'artefacts (lacunes, bords irréguliers, etc.). Si vous le faites correctement, vous pouvez mettre en œuvre la translucidité avec le flou. Tout cela est assez facile à mettre en œuvre sur une seule toile. Mais lorsque plusieurs toiles sont utilisées, c'est beaucoup plus difficile à mettre en œuvre.

 
Anatoli Kazharski #:

Il ne fonctionne qu'avec une seule toile.

Et je ne suis pas prêt à réécrire ma bibliothèque graphique pour que tout fonctionne sur un seul canevas.

Bien que ce soit intéressant, mais sachant combien de temps cela pourrait prendre, je ne peux pas décider d'entreprendre un tel défi pour le moment. Je n'ai plus autant de temps qu'avant.

En fait, j'utilise plusieurs toiles (généralement pas plus de 4).
Il y a toujours un juste milieu. Un extrême est de peindre toutes les statiques et toutes les dynamiques sur une seule toile, l'autre extrême est de peindre tous les objets sur des toiles séparées.
Il est important de ne pas oublier que si vous avez deux toiles avec transparence, se chevauchant l'une l'autre, alors le CPU, (peut-être dans Win10-11 GPU, mais je pense que c'est toujours le CPU), mélangera chaque pixel même homogène (transparence non nulle) de l'arrière-plan.
Ici, nous pouvons emprunter à JS la pratique de la mise en cache du canevas ou d'une partie de celui-ci pour améliorer les performances.
Pour ce qui est des cercles anticrénelés, j'ai déjà publié une variante de ce type de cercle, qui est idéale (en termes de performances) pour les cercles de rayon inférieur à ~5 pixels. Je pense que la fonction s'appelait iDot(), et se trouvait dans le code de 3DStars. Elle est très primitive et courte (environ 10 lignes de code). Pour les cercles de plus grand rayon, elle est loin d'être optimale en termes de performances. Pour les cercles de grand rayon, la fonction la plus performante compte déjà plus de 100 lignes de code.
Oui, après des années passées à établir de nouvelles connexions neuronales dans le cerveau sur le canevas, je peux maintenant créer une bibliothèque sur le canevas à n'importe quel niveau. Il faudrait du temps et de la motivation.
L'algorithme de Wu est considéré comme obsolète.
 
Anatoli Kazharski #:

Nous avons discuté de deux défis :

1. S'il s'agit de celui dont je parlais à l'origine, une solution algorithmique serait suffisante dans certains cas.

2. S'il s'agit de celui que vous avez mentionné, alors quelques fonctions ne suffiront pas. Vous avez besoin d'un système dans lequel toutes les couches sont stockées dans des tableaux. Chaque couche doit être dessinée en tenant compte de ce qui est dessiné sur les couches inférieures. En outre, toutes les méthodes de la classe CCanvas doivent être corrigées. La couleur de chaque pixel doit être mélangée avec celle du pixel inférieur, en tenant compte de la transparence. Ainsi, il n'y aura pas d'artefacts (lacunes, bords irréguliers, etc.). Si vous le faites correctement, vous pouvez mettre en œuvre la translucidité avec le flou. Tout cela est assez facile à mettre en œuvre sur une seule toile. Mais lorsque plusieurs toiles sont utilisées, c'est beaucoup plus difficile à mettre en œuvre.

Je pensais que je ne parlais que de l'algorithme de lissage. Sans tenir compte de la superposition de toiles transparentes. Bien que... Si vous les superposez, de nouveaux problèmes apparaîtront certainement. C'est pourquoi j'ai fait référence à Nikolay - vous voyez, il a toutes les connexions neuronales depuis longtemps, et son cerveau est probablement déjà en train de penser tout seul en tenant compte de tous les problèmes possibles avec la toile).

 
Artyom Trishkin #:

Je pensais que je parlais simplement de l'algorithme de lissage. Sans référence à la superposition de toiles transparentes. Bien que... Si vous les superposez, de nouveaux problèmes ne manqueront pas de surgir. C'est pourquoi j'ai fait référence à Nikolay - vous voyez, il a toutes les connexions neuronales depuis longtemps, et son cerveau est probablement déjà en train de penser tout seul en tenant compte de tous les problèmes possibles avec la toile).

Artem, ce ne sont vraiment pas des tâches triviales qui nécessitent de nouvelles connexions neuronales. Par exemple, en SVG, il existe un concept tel que viewBox. J'ai déjà regardé beaucoup de vidéos sur son fonctionnement, lu beaucoup de documentation, écrit beaucoup de code, et il m'arrive encore de me retrouver dans l'impasse. Je n'ai toujours pas les connexions neuronales nécessaires, même s'il m'a semblé plusieurs fois que j'avais tout compris.