Flash 24 – praktická trigonometrie

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!:)

Určitě si přečtěte

Články odjinud