Úloha 115: Barevná paleta pro mandalu

Úkolem je navrhnout automatický výpočet pěkné cyklické sady sady barev použitelných např. v omalovánkách typu "mandala". Pro inspiraci si pusťte toto video. Hlavní myšlenkou je, že mají barvy pěkně ladit a mají mít cyklickou topologii (tj. na poslední barvu v sadě opět navazuje barva první). Výstupem je množina 5 až 40 barev. Je zcela na Vás, jaký systém pro výpočet barev použijete, my budeme (subjektivně) hodnotit jen výsledek.

Screenshot

Základ

Jako základ poslouží projekt 115colormandala z repository grcis. Je připravena jednoduchá aplikace, ve které uživatel definuje počet barev a dále může v textovém poli Param: zadat několik parametrů. Podle těchto údajů Váš algoritmus sestaví množinu barev (funkce Colormap.Generate()). Nic dalšího implementovat nemusíte, o zobrazení barevné palety se již postará připravená WinForms aplikace. Vaše změny budete editovat ve zdrojovém souboru Colormap.cs, významná místa jsou označena závorkami:

  // {{
  // }}

Svoje úpravy kódu nemusíte omezovat na oblast vyznačenou těmito závorkami. Můžete samozřejmě přidat nějakou pomocnou třídu, datovou strukturu, apod. Všechny modifikace však musíte soustředit do tohoto jednoho odevzdávaného souboru.

Technické detaily

Funkce Colormap.Generate() dostane v parametrech požadovaný počet barev numCol (nemusíte ho používat, můžete udělat i paletu jiné délky, budete-li k tomu mít vážný důvod). Je též předán textový řetězec string param obsahující textové pole Param: z formuláře. Formát tohoto textu je zcela na Vás, doporučujeme však, abyste zadávání příliš nekomplikovali a vždy k řešení připojili návod k použití.
Výstupní barevná paleta se píše do pole colors, pole byste si měli alokovat ve správné velikosti, např. colors = new Color[ 6 ]; pro šest barev..

Analýza parametrů z textového pole: s výhodou můžete použít funkce z pomocné knihovny Util. Příklad je uvedený v pilotní implementaci: funkce Util.ParseKeyValueList( param ); nejprve rozdělí text na úseky oddělené čárkami a v nich se poté mohou hledat definice ve tvaru <key>=<value>. Viz příklad z pilotní implementace (funkce bool Util.TryParse( p, "name", ref val ) vrací true pokud byl daný klíč nalezen, současně je přepsána hodnota parametru val).

Ve funkci InitParams() můžete rovněž zadat stručnou nápovědu k parametrům, která se formou "ToolTip" zobrazí uživateli při zastavení ukazovátka myši nad daným textovým polem. Viz pilotní implementace.

Co odevzdat

Jako řešení úlohy posílejte mailem pouze modifikovaný zdrojový soubor Colormap.cs! (nezapomeňte ve funkci InitParams() vracet svoje jméno). Nepřijímám celé VS projekty. V případě použití nějaké zajímavé sady parametrů můžete přesné znění pole Params: vrátit jako default funkcí InitParams(), případné další pěkné kombinace napište do poznámek nebo doprovodného mailu.

Podpora

Budete pravděpodobně potřebovat funkce pro převody mezi barevnými prostory apod.; ty najdete v common/MathSupport.cs. Převody RGB<->HSV jsou přímo demonstrovány v pilotním řešení.

Inspirace

Různé online stránky pro generování web-palet, Adobe Color CC (dříve Adobe Kuler), apod.

Termín

Odevzdat do: 4. 11. 2018

Body

Základ: 8 bodů za netriviální řešení (musíte zavést i modifikaci barevné složky Hue),
3 bonusové body: za nápaditost a estetiku palety nebo eleganci řešení

Projekt

Visual Studio projekt: 115colormandala

Zdrojový soubor

Modifikujte a odevzdejte pouze soubor: Colormap.cs
Ve funkci Colormap.InitParams() vracejte své jméno!


Copyright (C) 2018 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)