Discussione sull’articolo "Visualizza questo! Libreria grafica di MQL5 simile a 'plot' del linguaggio R" - pagina 5

 
Artyom Trishkin #:

Tutti i metodi di smoothing dipendono fortemente dall'opacità delle linee. A circa il 50% di opacità tutto diventa unaliased e presenta artefatti.

Ora ci sono artefatti anche con linee completamente opache.

Stavamo parlando del tentativo di disegnare un cerchio completamente opaco con bordi smussati (usando l'algoritmo di Wu) senza perdere la morbidezza.

Ciò richiede metodi speciali di riempimento con bordi smussati.

 
Anatoli Kazharski #:

Ora ci sono artefatti anche con linee completamente opache.

Si trattava di provare a disegnare un cerchio completamente opaco con bordi smussati (usando l'algoritmo di Wu) senza perdita di scorrevolezza.

Ciò richiede metodi speciali di riempimento con bordi smussati.

Mi sembra di capire che non si può fare da soli?

 
Artyom Trishkin #:

Mi rendo conto che non posso farlo da solo?

Perché no? Provate! )

Puoi anche risolvere il caso che hai citato:

Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading

Discussione dell'articolo "Visualise it! Una libreria grafica in MQL5 come analogo di plot di R".

Artyom Trishkin, 2023.07.31 12:39 AM

Tutti i metodi di smoothing dipendono fortemente dall'opacità delle linee. A circa il 50% della trasparenza tutto diventa non liscio e presenta artefatti.

Cioè, il disegno su una tela completamente trasparente (CCanvas) può essere fatto tenendo conto del livello inferiore (grafico e altri oggetti) e sarà senza artefatti.

Ma sembra piuttosto macchinoso e complicato. Inoltre, non è chiaro quanto possa influire sulle prestazioni. Vorrei comunque che gli sviluppatori del terminale risolvessero questo bug.

 
Anatoli Kazharski #:

Perché no? Provate! )

Potete anche risolvere il caso che avete menzionato:

Cioè, il rendering su una tela completamente trasparente (CCanvas) può essere eseguito tenendo conto del livello inferiore (grafico e altri oggetti) e sarà privo di artefatti.

Ma sembra piuttosto macchinoso e complicato. Inoltre, non è chiaro quanto possa influire sulle prestazioni. Vorrei comunque che gli sviluppatori del terminale risolvessero questo bug.

Invierei tale compito (se non agli sviluppatori, ma ai membri del forum) a Nikolai @Nikolai Semko per la soluzione ;)

 
Artyom Trishkin #:

Invierei questo compito (se non agli sviluppatori, ma ai membri del forum) a Nikolai @Nikolai Semko per risolverlo ;)

Lui lavora con una sola tela.

E io non sono pronto a riscrivere la mia libreria grafica per far funzionare tutto su una sola tela.

Anche se è interessante, ma sapendo quanto tempo potrebbe richiedere, non posso decidere di intraprendere una tale sfida al momento. Non ho più il tempo di una volta.

 
Anatoli Kazharski #:

Funziona solo con una tela.

E non sono pronto a riscrivere la mia libreria grafica per far funzionare tutto su una sola tela.

Anche se è interessante, ma sapendo quanto tempo potrebbe richiedere non posso decidere di intraprendere una tale sfida al momento. Non ho più il tempo di una volta.

Beh, è un algoritmo. Che differenza fa: su una tela o su più tele?

 
Artyom Trishkin #:

Beh, è un algoritmo. Che differenza fa se è su una tela o su più tele?

Abbiamo discusso due problemi:

1. Se questo è quello di cui parlavo all'inizio, allora una soluzione algoritmica sarebbe sufficiente per alcuni casi.

2. Se è quello che avete menzionato, allora un paio di funzioni non bastano. È necessario uno schema in cui tutti i livelli siano memorizzati in array. Ogni livello deve essere disegnato tenendo conto di ciò che viene disegnato sui livelli sottostanti. Inoltre, tutti i metodi della classe CCanvas devono essere corretti. Il colore di ogni pixel deve essere miscelato con quello sottostante, tenendo conto della trasparenza. In questo modo non ci saranno artefatti (spazi vuoti, bordi frastagliati, ecc.). Se lo si fa bene, è possibile implementare la traslucenza con la sfocatura. Tutto questo è abbastanza facile da implementare su una singola tela. Ma quando si utilizzano più tele, è molto più difficile da implementare.

 
Anatoli Kazharski #:

Funziona solo con una tela.

E non sono pronto a riscrivere la mia libreria grafica per far funzionare tutto su una sola tela.

Anche se è interessante, ma sapendo quanto tempo potrebbe richiedere non posso decidere di intraprendere una tale sfida al momento. Non c'è più il tempo di una volta.

In realtà utilizzo più tele (di solito non più di 4).
C'è sempre una media aurea. Un estremo è dipingere tutta la statica e tutta la dinamica su un'unica tela, l'altro estremo è dipingere tutti gli oggetti su tele separate.
È importante non dimenticare che se si hanno due tele con trasparenza, sovrapposte l'una all'altra, la CPU, (forse in Win10-11 la GPU, ma credo ancora la CPU), mescolerà ogni pixel anche se lo sfondo è omogeneo (trasparenza non zero).
Qui possiamo prendere in prestito da JS la pratica di memorizzare nella cache il canvas o una parte di esso per migliorare le prestazioni.
Per quanto riguarda i cerchi antialias, ho già pubblicato una variante di tale cerchio, che è ideale (in termini di prestazioni) per cerchi con raggio inferiore a ~5 pixel. Credo che la funzione si chiami iDot() e si trovi nel codice di 3DStars. È molto primitiva e breve (circa 10 righe di codice). Per i cerchi di raggio maggiore, è tutt'altro che ottimale in termini di prestazioni. Per raggi maggiori, la funzione ad alte prestazioni supera già le 100 righe di codice.
Sì, dopo aver stabilito per anni nuove connessioni neurali nel cervello su tela, ora posso creare una libreria su tela a qualsiasi livello. Ci sarebbe tempo e motivazione.
L'algoritmo di Wu è considerato obsoleto.
 
Anatoli Kazharski #:

Abbiamo discusso due sfide:

1. Se si tratta di quella di cui parlavo all'inizio, per alcuni casi sarebbe sufficiente una soluzione algoritmica.

2. Se si tratta di quello che avete menzionato, allora un paio di funzioni non sono sufficienti. È necessario uno schema in cui tutti i livelli siano memorizzati in array. Ogni livello deve essere disegnato tenendo conto di ciò che è stato disegnato sui livelli sottostanti. Inoltre, tutti i metodi della classe CCanvas devono essere corretti. Il colore di ogni pixel deve essere miscelato con quello sottostante, tenendo conto della trasparenza. In questo modo non ci saranno artefatti (spazi vuoti, bordi frastagliati, ecc.). Se lo si fa bene, è possibile implementare la traslucenza con la sfocatura. Tutto questo è abbastanza facile da implementare su una singola tela. Ma quando si utilizzano più tele, è molto più difficile da implementare.

Pensavo di parlare solo dell'algoritmo di smoothing. Senza considerare la sovrapposizione di tele trasparenti l'una sull'altra. Anche se... Se li si sovrappone, si presentano sicuramente nuovi problemi. Ecco perché ho fatto riferimento a Nikolay - vedi, lui ha tutte le connessioni neurali da molto tempo, e il suo cervello probabilmente sta già pensando da solo tenendo conto di tutti i possibili problemi con la tela).

 
Artyom Trishkin #:

Pensavo di parlare solo dell'algoritmo di smoothing. Senza alcun riferimento alla sovrapposizione di tele trasparenti l'una sull'altra. Anche se... Se li si sovrappone, sorgeranno sicuramente nuovi problemi. Ecco perché ho fatto riferimento a Nikolay - vedi, lui ha tutte le connessioni neurali da molto tempo, e il suo cervello probabilmente sta già pensando da solo tenendo conto di tutti i possibili problemi con la tela).

Artem, non si tratta di compiti banali che richiedono nuove connessioni neurali. Ad esempio, in SVG esiste il concetto di viewBox. Ho già visto molti video sul suo funzionamento, ho letto molta documentazione, ho scritto molto codice, ma a volte rimango ancora perplesso. Non ho ancora le connessioni neurali necessarie, anche se più volte mi è sembrato di aver capito tutto.