Vymyslete a implementujte animaci kreslenou pouze pomocí teček / kruhů. Animace musí být počítána po jednotlivých snímcích ("off-line rendering"), nakonec vyrobíte video-soubor např. programem ffmpeg.
Jako základ poslouží projekt 083animation z repository grcis (GIT). Je připravena jednoduchá aplikace, která umí opakovaně pouštět vaši metodu Animation.DrawFrame() a výsledky zapisovat do jednotlivých PNG souborů. Výpočet se provádí v separátních vláknech, a lze jej lze v případě potřeby zastavit tlačítkem Stop.
Pohyb nebo změna tvarů v rovině, 3D efekt byste museli sami napodobit kreslením "odzadu-dopředu" (tzv. malířův algoritmus). Fantazii se meze nekladou, pouze musíte snímky animace kompletně nakreslit vaším programem a pomocí omezených prostředků třídy Canvas (jen tečky a vybarvené kruhy, viz níže). To znamená, že mi odevzdáte zdrojový soubor, ze kterého půjde bez použití dalších nástrojů (až na encoding videa nebo doplnění zvukové stopy) animaci vyrobit.
Výstup musíte realizovat přes danou třídu Canvas, která má k dispozici následující API (shodné s úlohou 082):
Metoda Animation.DrawFrame() dostane údaje o čase (viz pilotní implementaci) a referenci na kreslicí objekt Canvas. Metoda má přes něj k dispozici i údaje určující velikost snímku.
Nemůžete předpokládat nic o pořadí vykreslování jednotlivých snímků
animace. Jednotlivá vlákna výpočtu mohou kreslit snímky v libovolném
pořadí. Na začátku výpočtu animace (anebo před jednotlivým snímkem)
se spouští vaše metoda Animation.InitAnimation(), do ní můžete
dát případnou inicializaci globálních sdílených dat, apod.
Pokud budete potřebovat provést nějaký souhrnný výpočet (fyzikální/mechanickou
simulaci apod.), musíte jej umítit také do InitAnimation(). Výsledky
si ve vhodné formě uložte a kreslení jednotlivých snímků animace z nich potom
může čerpat.
Pro pohodlné ladění i pro odevzdání rozumného nastavení animace můžete modifikovat
inicializační proceduru Animation.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).
Viz např. tento návod.
Binárku ffmpeg pro Windows si můžete stáhnout např.
zde. Vytvořené video
někde vystavte nebo nahrajte na YouTube
a pošlete mi na něj odkaz. Nezapomeňte přiložit i zdrojový soubor
Animation.cs.
Pro větší pohodlí jsem do adresáře projektu okopíroval batch
encode.bat (musíte si ho upravit, je v něm cesta k binárce
ffmpeg).
Odevzdat do: 3. 1. 2023
Základ: 5 až 20 bodů podle zajímavosti a obtížnosti (může být i do 3D kvóty)
Bonus: za výjimečné řešení
Visual Studio projekt: 083animation
Modifikujte a odevzdejte soubor: Animation.cs
Přes parametr funkce Animation.InitParams() vraťte své celé jméno!
Nezapomeňte poslat odkaz na výsledné video.
Hlasujte na stránce soutěže, do 22. 1. 2023. Stránka s výsledky.
Copyright (C) 2010-2023 J.Pelikán, last change: 2023-01-05 02:53:58 +0100 (Thu, 05 Jan 2023)