Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Mandelbrot v C# WPF, se zoomem a ukládáním obrázků

C# .NET Formuláře WPF Zdrojákoviště Mandelbrot v C# WPF, se zoomem a ukládáním obrázků

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Aplikace vykreslí Mandelbrotovu množinu v základním pohledu. Klikáním levým tlačítkem myši je v daném místě počítáno zvětšení, tím je možno se postupně "nořit" hlouběji a prozkoumávat roztodivné tvary detailů množiny. Je možno přepínat mezi 3 barevnými schématy, výsledné obrázky je možné ukládat do složky uživatele (Obrázky/Mandel­brot) ve formátu jpeg.

Vypočtené body množiny se zapisují do WritableBitmap, která je jako Image vykreslována do Canvasu. Výpočty a vykreslování jsou poměrně rychlé, i když se počet iterací se zoomem zvyšuje. Je nastaven maximální zoom 44x, při větším zoomu jsem již pozoroval rozpixelování výsledného obrazu, kdy zřejmě typ double již neposkytuje dostatečný počet desetinných míst pro požadovanou zvyšující se přesnost výpočtu.

Verze 1.01, 7.11.2017: Na základě připomínky lastp byl kód zbaven zbytečné třídy Bod, z barevných složek R, G, B se generuje barva, ta se přidává do pomocného seznamu barev, ze kterého se ve třídě Render vytváří pole pixelů pro Writable bitmap.


Galerie

Program byl vytvořen v roce 2017.

 

Stáhnout

Staženo 24x (145.83 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Program pro vás napsal Bruno Schwarzbach
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor pracuje v oboru polygrafie, programování má jako hobby.
Aktivity (4)

 

 

Komentáře
Zobrazit starší komentáře (3)

Avatar
Bruno Schwarzbach:26. října 14:44

Díky za užitečné podněty, dávají mi smysl.

 
Odpovědět 26. října 14:44
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:26. října 14:50

Osobně už private access modifier taky nepíšu, je to redundantní informace a akorát zabírá místo.

 
Odpovědět  -3 26. října 14:50
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:26. října 16:59

Jednu dobu jsem o tom hodně četl, protože mi to připadalo také zbytečné, ale názory na to jsou poměrně jednotné, modifikátory bys měl psát vždy. Hodně juniorů třeba neví jak funguje internal, není vždy jasné jaký modifikátor se tam dá. Zrovna v C#, když před třídu nenapíšeš public, tak to dělá bordel s public vlastnostmi typu struct. Píše to takovou tu divnou hlášku Inconsistent accessibility.

Odpovědět  +4 26. října 16:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:26. října 18:46

Já to přebral jako interní konvenci firmy a ti to zase (nejspíš) přebrali od R#. První jsem byl taky proti tomu, pak jsem si zvykl a začal používat i mimo firemní kód. Dát classu public a nebo nechat internal je trošku něco jiného. Já to pravidlo (s vynecháním implicitního private) aplikuji jen na fieldy.

 
Odpovědět 26. října 18:46
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:26. října 21:59

Mám dojem, že fieldy v Javě jsou bez modifikátoru internal, ne private. Tam bys mohl mít s takovou konvencí dost nepříjemností. V C# to asi dělá to co by člověk očekával, ale nesouhlasím s tebou, že je to redundantní informace. Není to žádná informace, v tom je rozdíl, prostě to na první pohled není poznat. Proto se to tam většinou píše explicitně.

Odpovědět  +1 26. října 21:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:27. října 7:23

Nevím proč do toho pleteš Javu. Java má na classu taky package access modifier a můžeš ho vyjádřit jen tím, že tam žádný nenapíšeš - dost intuitivní. To je úplně stejná diskuze jako "tabs vs spaces", každý by měl radši taby, ale prostě defaultní chování IDE dává v .NETu mezery, tak to lidi používají. Tak jako ti IDE přidává private k nově generovaným věcem. V OS už se dost často definují různé konvence, které jdou právě proti tomuhle základnímu chování a ten kód je o mnoho lepší.

 
Odpovědět 27. října 7:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:27. října 11:36

Napsal jsi jen odpověď abys něco napsal, neobsahuje žádné pádné argumenty a otevírá zbytečně další témata, která s tím nesouvisí. Tab nebo mezera ti nezpůsobí, že nevíš na 100% co která část kódu dělá. Diskuzi považuji z mé strany za ukončenou, piš si to jak chceš, to už je tvoje věc.

Odpovědět 27. října 11:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:27. října 17:55

Ehm, Javu si napsal ty, jinak bych ani neodepisoval.

 
Odpovědět 27. října 17:55
Avatar
lastp
Redaktor
Avatar
lastp:30. října 13:26

Proč funkce Pocitej nezapisuje hodnoty red, green, blue přímo do pole pixelů ? Objekty Bod zbytečně zabírají skoro 100 MB paměti a celý výpočet zpomalují. Ve třídě Bod jsou kromě barev akorát souřadnice, které se nikde nepoužívají.

 
Odpovědět  +1 30. října 13:26
Avatar
Odpovídá na lastp
Bruno Schwarzbach:30. října 15:41

Máš pravdu, třída Bod je tam nakonec asi nadbytečná. Program jsem původně napsal pro WinForms, kde jsem kreslil pomocí SetPixel do PictureBoxu, přímo v rámci metody Pocitej ve třídě Mandelbrot. Při konverzi do WPF jsem šel per partes, až v momentě kdy jsem ze třídy Mandelbrot "vycucl" výstup do seznamu Bodů, jsem začal přemýšlet, jak body vykreslit. Nakonec jsem skončil u WritableBitmap a už mi nedošlo, že použiju jen barevné složky a ne souřadnice. Díky za tip, předělám to.

 
Odpovědět 30. října 15:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 13. Zobrazit vše