Matematické výrazy ve Flashi, tedy výpočty objektu Math, si dnes ukážeme na praktickém příkladu.
Matematické výrazy
Dnes opět zabrousíme spíše do části programování v action scriptu. Při něm samotném mnohdy potřebujeme (a nemusíme to ani vědět:)) použít některou matematickou funkci – počínaje těmi jednoduše nahraditelnými pokud nevím jak je ve Flashi použít – druhá mocnina apod., až po ty složitější – sinus, cosinus, exponent. Samozřejmě si dnes již naznačíme široké pole využití těchto funkcí, ale ve zkratce nám tyto funkce pomáhají s interakcemi mezi objekty ve Flashi, s tvorbou náhodných událostí:), pochopitelně i v matematických výpočtech a zaokrouhlování nebo při vytvářením složitých geometrií naší grafiky.
Další formou práce s informace ve Flashi je jejich uskladňování v polích, kterému se budeme věnovat později. Totéž platí i pro další důležitou skupinu funkcí, totiž objekt Date. Ten slouží k tvorbě časovačů či generování aktuálních údajů o čase či datu. Naši práci na lepším využívání některých dalších základních objektů Flashe začneme však u již zmiňovaných matematických výrazů, které pojímá objekt Math (pojmenování je jak bývá zvykem anglické a znamená doslovně matematika, což ho plně vystihuje).
Objekt Math
Vzhledem ke skutečnosti, že tento objekt nemůžeme bez základních znalostí trigonometrických funkcí patřičně použít, protože se řadí mezi jedny z těch nejvyužívanějších (za chvíli si ukážeme proč), zabrousíme tedy mimo běžnou náplň článku částečně i do matematiky. Zabývat se matematickými konstanty jako je Eulerova by již bylo spolu s vysvětlováním přirozených logaritmů rozhodně nad rámec našeho článku, tyto znalosti si samozřejmě může každý doplnit v rámci středoškolské matematiky a pouze se pokusím lehce nastínit jejich povahu.
Na druhém pólu funkcí pod objektem Math leží třeba zaokrouhlovací funkce, které lze poměrně snadno vysvětlit i pochopit – a totéž platí pro základní pojetí absolutních hodnot – proto si uvedem tabulku se základními metodami a vlastnostmi objektu Math s krátkými popisky, které budeme dále rozvíjet při našich příkladech.
Možnosti objektu Math
Metoda nebo vlastnost |
Popis |
abs(číslo) |
Vypočet absolutní hodnoty – vzdálenost čísla od nuly (Math.abs(-10) -> 10; Math.abs(10) -> 10). |
acos(číslo) |
Vypočítá arcus cosinus. |
asin(číslo) |
Vypočítá arcus sinus. |
atan(číslo) |
Vypočítá arcus tangens. |
atan2(y, x) |
Výpočet úhlu od osy x k bodu na ose y v radiánech. |
ceil(číslo) |
Zaokrouhlí číslo na nejbližší celé číslo nahoru – 2.19 na 3. |
cos(číslo) |
Vypočítá cosinus úhlu v radiánech. |
exp(číslo) |
Výpočet exponentu konstanty e. |
floor(číslo) |
Zaokrouhlí číslo na nejbližší celé číslo dolů – 2.89 na 2. |
log(číslo) |
Výpočet přirozeného logaritmu. |
max(x, y) |
Vrátí větší ze dvou hodnot. |
min(x, y) |
Vrátí menší ze dvou hodnot. |
pow(základ, exponent) |
Vypočítá exponent čísla. |
random() |
Vybere a vrátí náhodné číslo z intervalu 0.0 a 1.0. |
round(číslo) |
Zaokrouhlí číslo na nejbližší celé číslo. |
sin(číslo) |
Vypočítá sinus úhlu v radiánech. |
sqrt(číslo) |
Vypočítá druhou mocninu čísla. |
tan(číslo) |
Vypočítá tangens úhlu v radiánech. |
E |
Eulerova konstanta – základ přirozeného logaritmu – 2.178, používá se například u rychlostní konstanty podle Gultberg-Waageho věty o průběhu chemických reakcí. |
LN2 |
Přirozený logaritmus 2. |
LOG2E |
Logaritmus e při základu 2. |
LN10 |
Přirozený logaritmus 10. |
LOG10E |
Logaritmus e při základu 10. |
PI |
Podíl obvodu kružnice a jejího poloměru – 3.142. |
SQRT1_2 |
Druhá mocnina z ½. |
SQRT2 |
Druhá mocnina z 2. |
Metody a vlastnosti Math
Objekt Math nemusíme instanciovat, což nám umožňuje jeho vlastnosti (jsou pouze pro čtení a všechny se zapisují velkými písmeny) a metody používat přímo po uvedení objektu Math. Ukážeme si tedy, jak bychom třeba získali větší číslo z dvojice 8 a 12:
nejvetsicislo= Math.max(8, 12)
Při používání konstant je postup samozřejmě podobný – vzorec 2PIr:
kruh = Math.PI * 2 * polomer
Trigonometrie v kostce
Protože se budeme bavit o výpočtech úhlů podle již zmíněné středoškolské trigonometrie, nejprve si něco povíme o sinu, cosinu a tangentu. Nejprve bychom si měli ujasnit, že trojúhelník se skládá z přepony a dvou odvěsen. Podle následujícího náčrtku si ukážeme základní pojmenování stran trojúhelníka vzhledem k úhlu.

V pravoúhlém trojúhelníku nám úhel théta definují délky jeho tří stran, sinus, cosinus a tangens. Každá trigonometrická funkce se podle našeho náčrtku definuje takto:
Sinus – Sin théta – protilehlá ku přeponě
Cosinus – Cos théta - přilehlá ku přeponě
Tangens – Tan théta - protilehlá ku přilehlé
Pro zapamatování nám může posloužit i mnemotechnická pomůcka, vycházející z anglických názvů uvedených v náčrtku – SOH (Sinus = opposite/hypotenuse), CAH (Cosinus = adjacent/hypotenuse) a TOA (Tangens = opposite/adjacent).
Pokud tedy budeme znát délky dvou libovolných stran trojúhelníka, můžeme vypočítávat úhly. Samotné využití ve Flashi je nasnadě, a proto si ho nyní ukážeme a nebudeme se již dále vracet do školních lavic (hned po tomto použití)!:)
Flash a théta
Každý objekt na scéně svírá vůči scéně nebo jakémukoliv jinému objektu určitý úhel. Protože není neobvyklé tvořit animace a uživatelská rozhraní pouze díky ActionScriptu, tento úhel nám může být v mnohém nápomocný. My si budeme toto postupně prezentovat na dvou modelových příkladech, typických pro začátky práce s Flashem – na kolečku pro ovládání hlasitosti a především pak základním kamenu rozličných her, totiž námi ovládaném autíčku! Dnes začneme u onoho ovládání hlasitosti.
Většinou pracujeme ve Flashi s hodnotami přilehlé a protilehlé strany – ty nám označují souřadnice pro body x a y. Pokud si tedy náš nákres obměníme za tento:
Úhel théta nyní spočítáme tedy takto:
Tan théta = protilehlá ku přilehlé = y/x
Théta = ArcTan(y/x)
Při zápisu ve Flashi bychom mohli postupovat takto:
theta = Math.atan(this._y/this_x)
Resp. Flash nám usnadní i toto díky další metodě, totiž atan2, která nám poskytují příjemnější zápis bez dělení se stejným výsledkem (i když nám může připadat takovéto zjednodušení jako zbytečnost):
theta = Math.atan2(this._y, this_x)
Radiány?:(
Nyní přichází na řadu další Flashoškolní vsuvka. O co lépe se v matematice používají radiány, o to více by se nám nemusely někdy hodit, a proto si rovnou ukážeme, jak navzájem radiány a úhly převádět ve Flashi:
radian = Math.PI/180 * stupne
stupne = radian * 180/Math.PI
Konečně praxe!
Ano, začneme v dnešním díle již prakticky trigonometrické funkce objektu Math používat, ale půjde pouze o ukázkový výpočet úhlu, který svírá námi přetahovaný objekt po scéně s výchozí osou x – tento údaj bude relativní vůči naší scéně.
- Vytvoříme na scéně textové pole.
- Nastavíme mu Single Line a Dynamic Text.
- Pojmenujeme ho jako uhel.
- Vytvoříme na scéně movie klip.
- Pojmenujeme si jeho instanci cudlik.
- Vybereme akce klipu cudlik.
- Vložíme Actions -> onClipEvent -> Load.
- Zvolíme Actions -> startDrag.
- Vložíme do pole Target this.
- Zaškrtneme políčka Expression, Constrain to rectangle a Lock mouse to center.
- Do polí L a T zadáme nulu pro hranice scény.
- V polích R a B zase zadáme 300 pro šířku a výšku naší scény.

- Použijeme Actions -> onClipEvent -> enterFrame.
- Navolíme Actions -> set variable.
- V poli Variable bude proměnná pro úhel v radiánech – radiany.
- V poli Value vybereme Objects -> Math -> atan2.
- Parametry y a x funkce atan2 zaměníme za cesty this._y a this._x.
- Zaškrtneme políčko Expression u pole Value.

- Opět použijeme Actions -> set variable.
- Pole Variable ponese jméno našeho výstupního textového pole uhel absolutně pozicované.
- V poli Value bude pak výraz pro převod radiánů na stupně, který jsme s již ukazovali: radiany * 180/Math.PI.
- Na konec tohoto výrazu připojíme řetězec “ stupňů”.
- Po zaškrtnutí políčka Expression u pole Value máme hotovo!
Náš příklad si jako vždy můžete stáhnout a níže i prohlédnout.
Příště …
… navážeme na dnešní povídání a dostaneme se i k používání sinu a cosinu u pohybu autíčka!:)