úloha 092: Generování zajímavého obrázku jen z úseček
Úkolem je vygenerovat jakýkoliv technicky i vizuálně zajímavý obrázek
vytvořený pouze z úseček (lomených čar).
Náměty
- fraktály (alternativní vizualizace Mandelbrotovy množiny, list kapradiny, ...)
- jiné pravidelné/nepravidelné geometrické obrazce/vzory (spirály, dráhy pohybu..)
- čárová "cover verze" vašeho oblíbeného abstraktního stylu (např. generátor obrazů ve stylu P. Mondriana)
- cokoli dalšího vás napadne, ale výsledek by měl být zajímavý vizuálně i technicky/algoritmicky
(tedy ne složitý výpočet ze kterého vypadne jeden čárový graf, ani hezký obrázek vytvořený ze 250 úseček
zadrátovaných ve zdrojovém kódu).
Prosím nepřevádějte úlohu na "zajímavý rastrový obrázek"
kreslením bodů pomocí maličkých úseček.
Pokud možno nepoužívejte lomené čáry k aproximaci hladkých křivek!
Základ
Základem poslouží projekt 092lines z repository
grcis
(GIT).
Je připravena jednoduchá aplikace, do které pouze doplníte vlastní implementaci metody
Lines.Draw() vykreslující obrázek.
Je možné zadávat požadované rozlišení výstupního rastrového obrázku a
další vhodné parametry přes textové pole formuláře.
Výsledek se automaticky zobrazí na obrazovce a je možné ho uložit na disk ve formátu PNG.
Technicky
Výstup musíte realizovat přes danou třídu Canvas, která má k dispozici
následující API:
- int Width - šířka obrazu v pixelech, do kterého máte kreslit (je možné modifikovat a pak zavolat Clear()).
- int Height - výška obrazu v pixelech, do kterého máte kreslit (je možné modifikovat a pak zavolat Clear()).
- Clear(Color bg) - inicializuje obrázek, nastaví barvu pozadí bg.
- SetColor(Color col) - nastaví pro vyplňování a kreslení danou barvu.
- SetPenWidth(float width) - nastaví šířku čáry pro kreslení čar.
- SetAntiAlias(bool aa) - nastaví, zda se má používat anti-aliasing.
- Line(float x1, float y1, float x2, float y2) - nakreslí úsečku z bodu [x1,y1] do bodu [x2,y2] aktuálně nastaveným perem (barva a tloušťka čáry).
- Line(double x1, double y1, double x2, double y2) - nakreslí úsečku z bodu [x1,y1] do bodu [x2,y2] aktuálně nastaveným perem (barva a tloušťka čáry).
- PolyLine(PointF[] arr) - nakreslí lomenou čáru, tj. posloupnost navazujících úseček, použije aktuálně nastavené pero.
- PolyLine(IEnumerable<PointF> arr) - nakreslí lomenou čáru, tj. posloupnost navazujících úseček, použije aktuálně nastavené pero.
Metoda by si měla poradit s libovolnou rozumnou velikostí obrázku s poměrem stran 4:3 (od 800 x 600 px výše).
Výchozí rozměr plátna je 800 x 520 px. Kreslící metody korektně ořezávají čáry přesahující meze.
Při volání metody Lines.Draw() vám bude parametry předán: objekt Canvas c,
přes který musíte realizovat veškerý váš výstup a textový parametr string param, kterým lze předávat
další vhodné údaje z formuláře aplikace. Parametr param nemusíte ve své
implementaci využívat. Pokud ano, navrhuji využít možností funkcí Util.ParseKeyValueList() a
Util.TryParse() (pro většinu běžných datových typů). Viz pilotní implementace.
Inicializace parametrů:
Pro pohodlné ladění i pro odevzdání nějakého pěkného nastavení modifikujte
inicializační proceduru InitParams().
Ta se zavolá vždy na začátku při inicializaci formuláře.
Do prvního parametru out string name napište své celé jméno.
Usnadníte tím příp. automatické vyhodnocování výsledků.
Co odevzdat
Jako řešení úlohy posílejte mailem modifikovaný zdrojový soubor Lines.cs.
Můžete připojit jeden vydařený výsledný obrázek, který program vygeneruje.
Termín
Odevzdat do: 21. 11. 2021
Body
Základ: 6 bodů + bonus (1 až 6 bodů).
Projekt
Visual Studio projekt: 092lines.
Zdrojový soubor
Modifikujte a odevzdejte soubor: Lines.cs
V parametru funkce InitParams() definujte své celé jméno!
Copyright (C) 2011-2021 J.Pelikán,
last change: 2021-10-27 13:53:06 +0200 (Wed, 27 Oct 2021)