From 25439faaa991693e29f691d4ef6f2d99fe4dc171 Mon Sep 17 00:00:00 2001 From: Filip Znachor Date: Wed, 24 May 2023 18:13:18 +0200 Subject: [PATCH] =?UTF-8?q?Pozn=C3=A1mky=20ze=203.=20p=C5=99edn=C3=A1?= =?UTF-8?q?=C5=A1ky=20z=20UPG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../03. Interaktivní 2D vektorová grafika.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 KIV UPG/03. Interaktivní 2D vektorová grafika.md diff --git a/KIV UPG/03. Interaktivní 2D vektorová grafika.md b/KIV UPG/03. Interaktivní 2D vektorová grafika.md new file mode 100644 index 0000000..b80c740 --- /dev/null +++ b/KIV UPG/03. Interaktivní 2D vektorová grafika.md @@ -0,0 +1,102 @@ +# Interaktivní 2D vektorová grafika + +## Animace vektorové grafiky + +- obraz měnící se v čase +- význam: + - snadnější vysvětlení dynamických jevů + - upoutání pozornosti + - oživení prezentace + - jednoduché hry ++ probíhá v čase t = 0 až T sekund ++ libovolný parametr vektorového elementu může být časově závislý ++ funkce času může mít fyzikální podstatu +- často je místo složité funkce vhodnější ji pro účel animace aproximovat + - vybereme uzlové body, ve kterých spočítáme přesnou hodntu + +### Tvorba animace + +**1. řešení** - nechci nic programovat +- nejjednodušší přístup +- tvorba ve WYSIWYG vektorovém editoru, zobrazení v běžné aplikaci +- **problémy** + - kreslítka animace běžně nepodporují + - ukládací formáty (kromě SVG a XAML) animace nepodporují + - zobrazovací aplikace mohou mít s animacemi problém + - mimimální kontrola nad kvalitou animace (trvání 5 sekund, ale FPS neovlivním) + +**2. řešení** - animace řídí grafická knihovna +- tvorba ve WYSIWYG vektorovém editoru +- ve své aplikaci načteme a objekty rozhýbáme pomocí grafické knihovny +- **problémy** + - může být obtížné získat objekty oddělené + - grafické knihovny animace běžně nativně nepodporují + +**3. řešení** - kompletně vše si řídím sám +- univerzální způsob +- animaci si kompletně zařídíme sami včetně interpolací +- objekty mohou být načteny ze souborů +- **problémy** + - není až tak jednoduché + - animace nepřenosná bez aplikace + +### Interpolace mezi klíčovími snímky + +- lze použít libovolnou interpolaci + - v praxi diskrétní, lineární nebo kubickou + +**Lineární interpolace** +- pro stanovení hodnoty $t \in \, $ vyžadujeme pouze znalost hodnot v časech $t_{i}, t_{i+1}$ +- $h(t) = (1-t) \cdot h_{i} + t \cdot h_{i+1}$ pro $t \in \, <0, 1>$ +- lze použít jen u jednoduchých animací + - nelze dobře použít např. pro pohyb na kružnici + +**Kubická interpolace** +- pro stanovení hodnoty $t \in \, $ je vyžadována znalost rychlosti růstu hodnot v čase $t_{i}, t_{i+1}$, tedy derivace $h'(t_{i}), h'(t_{i+1})$ +- $h(t) = a \cdot t^3 + b \cdot t^2 + c \cdot t + d$ pro $t = \, <0, 1>$ +- konstanty z požadavků na interpolaci +- rychlost lze také odvodit z dat + +## Událostní programování + +- moderní OS + - umožňuje běh více aplikací + - zajišťují správný chod systému +- aplikace + - nepřebírá kontrolu nad hardwarem + - svou čiností se vzájemně neovlivňují + - řízena událostmi + +Aplikace přijímá události od OS **ve smyčce** - program neodpovídá, když aplikace nezvládá reagovat na události. + +**Práce s myší a klávesnicí** +- manipulace s nimi vede k systémovým událostem +- součástí událostí jsou často i parametry + - např. pozice myši, označení stisknuté klávesy, ... +- jednoduchá událost vede často k několika událostem + +**Práce s dotykovou obrazovkou** +- dotyk (perem či prstem) převeden systémem na stisk tlačítka myši +- stejně fungují i základní gesta (zoom, pan) +- podpora multi-touch je složitější + - používají se speciální události, které nemusí knihovna implementovat + +**Interakce s grafickými objekty** +- je potřeba zjistit, zda na objekt uživatel klikl (tzv. hit-test) +- je-li objektem standardní komponentou, postará se o zjištění komponenta + - programátor řeší pouze obsluhu události komponenty + +**Hit-test** +- je potřeba rozlišovat + - původ události - program, myš, pero, prst + - účet hit-testu - efekt po najetí, výběr objektu +- je potřeba brát ohled na velikost objektů +- přesný hit-test pro kružnici + - porovnání kvardátu vzdálenosti od středu kružnice a kvadrátu jejího poloměru +- přesný hit-test pro konvexní polygon + - použije se zjištění vzdálenosti bodu od přímek +- hit-test s tolerancí pro přímku + - zjištění vzdálenosti bodu od přímky +- hit-test s tolerancí obecně + - průsečík objektu s kružnicí/čtvercem se středem v bodě zjišťování + - stačí detekovat pouze průnik \ No newline at end of file