Poznámky ze 3. přednášky z UPG
This commit is contained in:
parent
740a4f3182
commit
25439faaa9
|
@ -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 \, <t_{i}, t_{i+1}>$ 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 \, <t_{i}, t_{i+1}>$ 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
|
Loading…
Reference in New Issue