úloha 053: Generování zajímavého obrázku z obdélníků
Úkolem je vygenerovat jakýkoliv technicky a vizuálně zajímavý rastrový obrázek
vytvořený pouze z obdélníků.
Náměty:
- fraktály (alternativní vizualizace Mandelbrotovy množiny, list kapradiny, ...)
- jiné pravidelné/nepravidelné geometrické obrazce/vzory, ornamenty, ..
- aproximace bitmapy načtené z disku (simulované ochlazování, evoluční algoritmy, pointilistické filtry, ...)
- Cokoliv dalšího co 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 dva obdélníky, ani hezký obrázek vytvořený ze 150 obdélníků
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 bodů pomocí obdélníků s malým rozměrem.
Základem poslouží projekt 053rectangles z repository
grcis.
Je připravena jednoduchá kostra aplikace, do které pouze doplníte vlastní implementaci metody
Rectangles.Draw(), která vygeneruje váš obrázek.
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í obvodu.
- SetAntiAlias ( bool aa ) - nastaví, zda se má používat anti-aliasing.
- FillRectangle ( float cx, float cy, float w, float h ) - vybarví obdélník se středem [cx,cy], rozměry w x h a aktuálně nastavenou barvou.
- DrawRectangle ( float cx, float cy, float w, float h ) - nakreslí obvod obdélníka.
- FillRectangle ( float cx, float cy, float w, float h, float angle ) - vybarví obdélník se středem [cx,cy], rozměry w x h a nakloněný o úhel angle (ve stupních CCW).
- DrawRectangle ( float cx, float cy, float w, float h, float angle ) - nakreslí obvod obdélníka.
Metoda by si měla poradit s libovolnou rozumnou velikostí obrázku s poměrem stran 4:3 (od 800*600px výše).
Výchozí rozměr plátna je 800*600px. Kreslící metody korektně ořezávají kruhy/kružnice 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, vstupní rastrový obrázek Bitmap input, pokud
ho uživatel specifikoval a další parametr string param, kterým lze předávat libovolné
další údaje z formuláře aplikace. Parametry input ani param nemusíte ve své
implementaci využívat.
Jako řešení úlohy posílejte mailem modifikovaný zdrojový soubor Rectangles.cs a případné vstupní soubory
(např. vzorový obrázek, který pointilizujete). Dále připojte výsledný obrázek, který program generuje.
V případě, že výsledek je nedeterministický nebo závisí na vstupním souboru, připojte reprezentativní výběr
výsledných obrázků nebo odkaz na online galerii v případě většího počtu (desítky).
BODY: 6 až 12 + bonus
TERMÍN: do 11. 11. 2012
PROJEKT: 053rectangles
ZDROJOVÝ SOUBOR: Rectangles.cs
Copyright (C) 2012 J.Pelikán,
last change: $Date: 2014-10-03 15:44:39 +0200 (Fri, 03 Oct 2014) $
Send comments/requests to
pepca.at.cgg.mff.cuni.cz