úloha 082: Obrázek složený z teček

Úkolem je vygenerovat jakýkoliv technicky i vizuálně zajímavý obrázek vytvořený pouze z teček / kruhů.

Screenshot

Náměty

  • fraktály (alternativní vizualizace Mandelbrotovy množiny, list kapradiny, ...)
  • jiné pravidelné/nepravidelné geometrické obrazce/vzory (spirály z kružnic, rekurzivní jin-jang, ...)
  • kruhový remix vašeho oblíbeného abstraktního obrazu (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 vypadnou 2 kruhy, ani hezký obrázek vytvořený ze 150 teček zadrátovaných ve zdrojovém kódu). Dále prosím nepřevádějte úlohu na "zajímavý rastrový obrázek" kreslením pixelů pomocí teček s malým poloměrem.
Následující animační úloha (083animation) bude používat stejně omezené vykreslování. Pokud budete mít nápad vhodný i pro animaci, můžete ho použít v obou řešeních.

Základ

Základem poslouží projekt 082circles z repository grcis (GIT). Je připravena jednoduchá aplikace, do které pouze doplníte vlastní implementaci metody Circles.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.
  • SetAntiAlias (bool aa) – nastaví, zda se má používat anti-aliasing.
  • FillDisc (float x, float y, float r) – vykreslí kruh se středem [x,y], poloměrem r a aktuálně nastavenou barvou.
Metoda by si měla poradit s libovolnou rozumnou velikostí obrázku. Výchozí rozměr plátna je 800⨯520px. Kreslící metody korektně ořezávají tečky/kruhy přesahující meze.

Při volání metody Circles.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.

Inicializace formuláře

Pro pohodlné ladění i pro odevzdání nějakého pěkného nastavení můžete modifikovat 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ů.
Dále můžete nastavit implicitní hodnotu formulářového pole Param: a nápovědu pro toto textové pole (out string tooltip).

Co odevzdat

Jako řešení úlohy posílejte mailem modifikovaný zdrojový soubor Circles.cs. Tentokrát můžete připojit jeden vydařený výsledný obrázek, který program vygeneruje.

Termín

Odevzdat do: 20. 11. 2022

Body

Základ: 6 bodů + bonus podle zajímavosti a invence (může být i do 3D kvóty, maximálně 6).

Projekt

Visual Studio projekt: 082circles.

Zdrojový soubor

Modifikujte a odevzdejte soubor: Circles.cs
Přes parametr funkce Circles.InitParams() vraťte své celé jméno!


Copyright (C) 2011-2022 J.Pelikán, last change: 2022-11-13 17:10:25 +0100 (Sun, 13 Nov 2022)