"Görselleştirin! R dilinin plot fonksiyonuna benzer MQL5 grafik kütüphanesi" makalesi için tartışma - sayfa 5

 
Artyom Trishkin #:

Tüm yumuşatma yöntemleri büyük ölçüde çizgi opaklığına bağlıdır. Yaklaşık %50 opaklıkta her şey kenarlıksız hale gelir ve artefaktlar oluşur.

Artık tamamen opak çizgilerde bile artefaktlar var.

Düzgünlüğü kaybetmeden düzgünleştirilmiş kenarlarla (Wu'nun algoritmasını kullanarak) tamamen opak bir daire çizmeye çalışmaktan bahsediyorduk.

Bu, düzgünleştirilmiş kenarlarla doldurmak için özel yöntemler gerektirir.

 
Anatoli Kazharski #:

Artık tamamen opak çizgilerde bile artefaktlar var.

Bu, pürüzsüzlük kaybı olmadan kenarları yumuşatılmış (Wu'nun algoritmasını kullanarak) tamamen opak bir daire çizmeye çalışmakla ilgiliydi.

Bu, kenarları düzleştirilmiş özel dolgu yöntemleri gerektirir.

Anladığım kadarıyla bunu kendiniz yapamıyorsunuz?

 
Artyom Trishkin #:

Bunu tek başıma yapamayacağımı anladım.

Neden olmasın? Bir dene bakalım! )

Bahsettiğiniz durumu bile çözebilirsiniz:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerini test etme forumu

Makalenin tartışılması "Visualise it! R'deki plot'un bir benzeri olarak MQL5'te grafik kütüphanesi"

Artyom Trishkin, 2023.07.31 12:39 AM

Tüm yumuşatma yöntemleri büyük ölçüde çizgi opaklığına bağlıdır. Yaklaşık %50 opaklıkta her şey pürüzsüz olmaz ve artefaktlar oluşur.

Yani, tamamen şeffaf bir tuval (CCanvas) üzerine çizim, alt katman (grafik ve diğer nesneler) dikkate alınarak yapılabilir ve artefaktlar olmayacaktır.

Ancak oldukça koltuk değneği ve hantal görünüyor. Performansı ne kadar etkileyeceği de belli değil. Yine de terminal geliştiricilerinin bu hatayı düzeltmesini istiyorum.

 
Anatoli Kazharski #:

Neden olmasın? Bir dene bakalım! )

Bahsettiğiniz davayı bile çözebilirsiniz:

Yani, tamamen şeffaf bir tuval (CCanvas) üzerinde işleme, alt katman (grafik ve diğer nesneler) dikkate alınarak yapılabilir ve artefakt içermeyecektir.

Ancak oldukça koltuk değneği ve hantal görünüyor. Performansı ne kadar etkileyeceği de belli değil. Yine de terminalin geliştiricilerinden bu hatayı düzeltmelerini istiyorum.

Böyle bir görevi (geliştiricilere değil ama forum üyelerine) çözüm için Nikolai @Nikolai Semko 'ya gönderirdim ;)

 
Artyom Trishkin #:

Böyle bir görevi (geliştiriciler olmasa da forum üyeleri) çözmesi için Nikolai @Nikolai Semko 'ya gönderirdim ;)

Sadece bir tuval ile çalışıyor.

Ve her şeyin tek bir tuval üzerinde çalışmasını sağlamak için grafik kütüphanemi yeniden yazmaya hazır değilim.

İlginç olmasına rağmen, ne kadar zaman alabileceğini bildiğimden, şu anda böyle bir zorluğun üstesinden gelmeye karar veremiyorum. Artık eskisi kadar zamanım yok.

 
Anatoli Kazharski #:

Sadece bir tuval ile çalışır.

Ve her şeyin tek bir tuval üzerinde çalışmasını sağlamak için grafik kütüphanemi yeniden yazmaya hazır değilim.

Her ne kadar ilginç olsa da, ne kadar zaman alacağını bildiğim için şu anda böyle bir mücadeleye girmeye karar veremiyorum. Artık eskisi kadar zamanım yok.

Bu bir algoritma. Bir ya da birkaç tuval üzerinde ne fark eder ki?

 
Artyom Trishkin #:

Bu bir algoritma. Bir ya da birkaç tuval üzerinde olması ne fark eder?

İki sorunu tartıştık:

1. Eğer ilk başta bahsettiğim sorun buysa, algoritmik bir çözüm bazı durumlar için yeterli olacaktır.

2. Eğer bahsettiğiniz sorunsa, burada birkaç fonksiyon yeterli olmayacaktır. Tüm katmanların dizilerde saklandığı bir şemaya ihtiyacınız var. Her katman, altındaki katmanlarda çizilenler dikkate alınarak çizilmelidir. Ayrıca CCanvas sınıfındaki tüm yöntemler düzeltilmelidir. Her pikselin rengi, saydamlık dikkate alınarak altındakiyle harmanlanmalıdır. O zaman hiçbir yapaylık (boşluklar, pürüzlü kenarlar, vb.) olmayacaktır. Bunu doğru yaparsanız, bulanıklaştırma ile yarı saydamlık uygulayabilirsiniz. Tüm bunları tek bir tuval üzerinde uygulamak yeterince kolaydır. Ancak birkaç tuval kullanıldığında, uygulanması çok daha zordur.

 
Anatoli Kazharski #:

Sadece bir tuval ile çalışır.

Ve her şeyin tek bir tuval üzerinde çalışmasını sağlamak için grafik kütüphanemi yeniden yazmaya hazır değilim.

Her ne kadar ilginç olsa da, ne kadar zaman alacağını bildiğim için şu anda böyle bir mücadeleye girmeye karar veremiyorum. Artık eskisi kadar çok zamanım yok.

Aslında birden fazla tuval kullanıyorum (genellikle 4'ten fazla değil)
Her zaman altın bir ortalama vardır. Bir uç, tüm statik ve tüm dinamikleri tek bir tuvale boyamaktır, diğer uç ise tüm nesneleri ayrı tuvaller olarak boyamaktır.
Unutmamak gerekir ki, birbiriyle örtüşen şeffaflığa sahip iki tuvaliniz varsa, CPU (belki Win10-11 GPU'da, ama bence hala CPU), her pikseli homojen (sıfır şeffaflık olmayan) arka planı bile karıştıracaktır.
Burada JS'den performansı artırmak için tuvali veya bir kısmını önbelleğe alma uygulamasını ödünç alabiliriz.
Antialiased dairelere gelince, yarıçapı ~5 pikselden küçük daireler için ideal olan (performans açısından) böyle bir dairenin bir varyantını zaten yayınlamıştım. Sanırım fonksiyonun adı iDot() idi ve 3DStars kodunun içindeydi. Çok ilkel ve kısadır (yaklaşık 10 satır kod). Daha büyük yarıçaplı daireler için performans açısından optimal olmaktan uzaktır. Daha büyük yarıçaplar için, yüksek performanslı işlev zaten 100 satır kodun üzerindedir.
Evet, yıllarca tuval üzerinde beyinde yeni sinirsel bağlantılar kurduktan sonra, artık tuval üzerinde herhangi bir seviyede bir kütüphane yapabilirim. Zaman ve motivasyon olacaktır.
Wu algoritmasının modasının geçtiği düşünülüyor.
 
Anatoli Kazharski #:

İki zorluğu tartıştık:

1. Başlangıçta bahsettiğim şey buysa, bazı durumlar için algoritmik bir çözüm yeterli olacaktır.

2. Eğer bahsettiğiniz buysa, o zaman birkaç fonksiyon yeterli olmayacaktır. Tüm katmanların dizilerde saklandığı bir şemaya ihtiyacınız var. Her katman, altındaki katmanlarda çizilenler dikkate alınarak çizilmelidir. Ayrıca CCanvas sınıfındaki tüm yöntemler düzeltilmelidir. Her pikselin rengi, saydamlık dikkate alınarak altındakiyle harmanlanmalıdır. O zaman hiçbir yapaylık (boşluklar, pürüzlü kenarlar, vb.) olmayacaktır. Bunu doğru yaparsanız, bulanıklaştırma ile yarı saydamlık uygulayabilirsiniz. Tüm bunları tek bir tuval üzerinde uygulamak yeterince kolaydır. Ancak birden fazla tuval kullanıldığında, bunu uygulamak çok daha zordur.

Ben sadece yumuşatma algoritmasından bahsettiğimi sanıyordum. Şeffaf tuvallerin birbiri üzerine bindirilmesiyle ilgili değil. Yine de. Eğer üst üste koyarsanız, yeni sorunlar ortaya çıkacaktır. Bu yüzden Nikolay'a atıfta bulundum - görüyorsunuz, uzun süredir tüm sinirsel bağlantılara sahip ve beyni muhtemelen tuval ile ilgili tüm olası sorunları dikkate alarak kendi kendine düşünüyor).

 
Artyom Trishkin #:

Ben sadece yumuşatma algoritmasından bahsettiğimi sanıyordum. Şeffaf tuvallerin üst üste bindirilmesine atıfta bulunmadan. Yine de. Onları üst üste koyarsanız, kesinlikle yeni sorunlar ortaya çıkacaktır. Bu yüzden Nikolay'a atıfta bulundum - görüyorsunuz, uzun süredir tüm sinirsel bağlantılara sahip ve beyni muhtemelen tuvalle ilgili tüm olası sorunları dikkate alarak kendi kendine düşünüyor).

Artem, bunlar gerçekten yeni sinirsel bağlantılar gerektiren önemsiz görevler değil. Örneğin SVG'de viewBox diye bir kavram var. Nasıl çalıştığına dair bir sürü video izledim, bir sürü doküman okudum, bir sürü kod yazdım ve hala bazen tıkanıyorum. Birkaç kez her şeyi çözmüş gibi görünsem de hala gerekli sinirsel bağlantılara sahip değilim.