Discussão do artigo "Visualize isto! Biblioteca gráfica em linguagem MQL5 como equivalente a plot de R" - página 5

 
Artyom Trishkin #:

Todos os métodos de suavização são altamente dependentes da opacidade da linha. Com cerca de 50% de opacidade, tudo se torna sem serrilhado e apresenta artefatos.

Agora, há artefatos mesmo com linhas totalmente opacas.

Estávamos falando sobre a tentativa de desenhar um círculo totalmente opaco com bordas suavizadas (usando o algoritmo de Wu) sem perder a suavidade.

Isso requer métodos especiais de preenchimento com bordas suavizadas.

 
Anatoli Kazharski #:

Agora há artefatos mesmo com linhas completamente opacas.

Tratava-se de tentar desenhar um círculo totalmente opaco com bordas suavizadas (usando o algoritmo de Wu) sem perda de suavidade.

Isso requer métodos especiais de preenchimento com bordas suavizadas.

Entendo que você não pode fazer isso sozinho?

 
Artyom Trishkin #:

Percebo que não posso fazer isso sozinho?

Por que não? Tente! )

Você pode até resolver o caso que mencionou:

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Discussão do artigo "Visualize it! Biblioteca gráfica em MQL5 como um análogo do plot do R"

Artyom Trishkin, 2023.07.31 12:39 AM

Todos os métodos de suavização dependem muito da opacidade da linha. Com cerca de 50% de transparência, tudo se torna não suave e apresenta artefatos.

Ou seja, desenhar em uma tela totalmente transparente (CCanvas) pode ser feito levando-se em conta a camada inferior (gráfico e outros objetos) e não haverá artefatos.

Mas isso parece um pouco complicado e incômodo. Também não está claro o quanto isso afetará o desempenho. Eu ainda gostaria que os desenvolvedores do terminal corrigissem esse bug.

 
Anatoli Kazharski #:

Por que não? Experimente! )

Você pode até resolver o caso que mencionou:

Ou seja, a renderização em uma tela totalmente transparente (CCanvas) pode ser feita levando-se em conta a camada inferior (gráfico e outros objetos) e não haverá artefatos.

Mas isso parece um pouco complicado e incômodo. Também não está claro o quanto isso afetará o desempenho. Eu ainda gostaria que os desenvolvedores do terminal corrigissem esse bug.

Eu enviaria esse problema (se não para os desenvolvedores, mas para os membros do fórum) para Nikolai @Nikolai Semko para que ele fosse resolvido ;)

 
Artyom Trishkin #:

Eu enviaria essa tarefa (se não for para os desenvolvedores, mas para os membros do fórum) para Nikolai @Nikolai Semko resolver ;)

Ele trabalha com apenas uma tela.

E eu não estou pronto para reescrever minha biblioteca de gráficos para que tudo funcione em uma tela.

Embora seja interessante, mas sabendo quanto tempo isso pode levar, não posso me decidir a enfrentar esse desafio no momento. Agora não tenho mais tanto tempo quanto antes.

 
Anatoli Kazharski #:

Ele só funciona com uma tela.

E não estou pronto para reescrever minha biblioteca de gráficos para que tudo funcione em uma única tela.

Embora seja interessante, mas sabendo quanto tempo isso pode levar, não posso me decidir a enfrentar esse desafio no momento. Agora não tenho mais tanto tempo quanto antes.

Bem, é um algoritmo. Que diferença faz - em uma tela ou em várias?

 
Artyom Trishkin #:

Bem, é um algoritmo. Que diferença faz se ele está em uma tela ou em várias?

Discutimos dois problemas:

1. Se este for o problema de que eu estava falando originalmente, então uma solução algorítmica seria suficiente para alguns casos.

2. Se for o que você mencionou, então algumas funções não serão suficientes. Você precisa de um esquema em que todas as camadas sejam armazenadas em matrizes. Cada camada deve ser desenhada levando-se em conta o que foi desenhado nas camadas abaixo dela. Além disso, todos os métodos da classe CCanvas devem ser corrigidos. A cor de cada pixel deve ser mesclada com a do pixel abaixo dele, levando em conta a transparência. Assim, não haverá artefatos (lacunas, bordas irregulares, etc.). Se você fizer isso corretamente, poderá implementar a translucidez com desfoque. Tudo isso é bastante fácil de implementar em uma única tela. Porém, quando várias telas são usadas, a implementação é muito mais difícil.

 
Anatoli Kazharski #:

Ele só funciona com uma tela.

E não estou pronto para reescrever minha biblioteca de gráficos para que tudo funcione em uma única tela.

Embora seja interessante, mas sabendo quanto tempo isso pode levar, não posso me decidir a enfrentar esse desafio no momento. Agora não tenho mais tanto tempo quanto antes.

Na verdade, eu uso várias telas (geralmente não mais do que 4)
Sempre há uma média de ouro. Um extremo é pintar toda a estática e toda a dinâmica em uma tela, o outro extremo é pintar todos os objetos em telas separadas.
É importante não esquecer que, se você tiver duas telas com transparência, sobrepostas uma à outra, a CPU (talvez na GPU do Win10-11, mas acho que ainda é a CPU) misturará cada pixel até mesmo um fundo homogêneo (transparência diferente de zero).
Aqui podemos pegar emprestado do JS a prática de armazenar em cache a tela ou uma parte dela para melhorar o desempenho.
Quanto aos círculos com suavização de serrilhado, já publiquei uma variante desse círculo, que é ideal (em termos de desempenho) para círculos com raio inferior a cerca de 5 pixels. Acho que a função se chama iDot() e estava no código do 3DStars. Ela é muito primitiva e curta (cerca de 10 linhas de código). Para círculos de raio maior, ela está longe de ser ideal em termos de desempenho. Para raios maiores, a função de alto desempenho já tem mais de 100 linhas de código.
Sim, depois de anos estabelecendo novas conexões neurais no cérebro na tela, agora posso criar uma biblioteca na tela em qualquer nível. Haveria tempo e motivação.
O algoritmo de Wu é considerado obsoleto.
 
Anatoli Kazharski #:

Discutimos dois desafios:

1. Se for aquele de que eu estava falando originalmente, então, em alguns casos, uma solução algorítmica seria suficiente.

2. Se for a que você mencionou, então algumas funções não serão suficientes. Você precisa de um esquema em que todas as camadas sejam armazenadas em matrizes. Cada camada deve ser desenhada levando em conta o que foi desenhado nas camadas abaixo dela. Além disso, todos os métodos da classe CCanvas devem ser corrigidos. A cor de cada pixel deve ser mesclada com a do pixel abaixo dele, levando em conta a transparência. Assim, não haverá artefatos (lacunas, bordas irregulares, etc.). Se você fizer isso corretamente, poderá implementar a translucidez com desfoque. Tudo isso é bastante fácil de implementar em uma única tela. Porém, quando várias telas são usadas, a implementação é muito mais difícil.

Pensei que estava falando apenas sobre o algoritmo de suavização. Sem levar em conta a sobreposição de telas transparentes umas sobre as outras. Embora... Se você as sobrepuser, certamente surgirão novos problemas. É por isso que me referi a Nikolay - veja bem, ele tem todas as conexões neurais há muito tempo e seu cérebro provavelmente já está pensando sozinho, levando em conta todos os possíveis problemas com a tela).

 
Artyom Trishkin #:

Pensei que estava falando apenas sobre o algoritmo de suavização. Sem nenhuma referência à sobreposição de telas transparentes umas sobre as outras. Embora... Se você as sobrepuser, certamente surgirão novos problemas. É por isso que me referi a Nikolay - veja, ele tem todas as conexões neurais há muito tempo e seu cérebro provavelmente já está pensando sozinho, levando em conta todos os possíveis problemas com a tela).

Artem, essas tarefas realmente não são triviais e exigem novas conexões neurais. Por exemplo, no SVG existe um conceito chamado viewBox. Já assisti a muitos vídeos sobre como ele funciona, li muita documentação, escrevi muito código e, mesmo assim, às vezes fico perplexo. Ainda não tenho as conexões neurais necessárias, mesmo que várias vezes tenha parecido que eu havia entendido tudo.