Vysvětlení

Stránku si stáhněte k sobě na disk (Soubor ⇒ Uložit jako...), abyste ji mohli upravovat. Z disku ji pak můžete normálně otevřít v prohlížeči, buďto obyčejně poklikáním, anebo ten soubor do prohlížeče přetáhněte. Když chcete upravit kód programu, otevřete ten soubor zároveň v nějakém textovém editoru – poznámkový blok prozatím stačí – a po každé úpravě soubor uložte a v prohlížeči nechte načíst znovu (klávesová zkratka je obvykle F5).

Když v programu napíšete nějakou chybu, stránka se nejspíš vůbec nezobrazí. Chyby se dají dobře odhalit v okně Konzole, které se v otevře:

Hozený banán

Letící banán můžeme popsat spoustou čísel, například:

...a tak podobně. Zajímá nás především výška nad zemí a vodorovná pozice, což jsou prostě souřadnice x, y, skrz které budeme kreslit trajektorii. Dál je důležitá rychlost a směr letu, nad tím se zahloubáme dále v textu. A konečně je pár dalších čísel, co se netýkají přímo banánu, ale jsou náramně důležitá: Pro jednoduchost prohlásíme, že vítr nefouká, takže rychlost větru = 0. Dohodli jsme se ale, že tření vzduchu vezmeme v potaz.

Simulace krok po kroku

Známe x, y pozici banánu na začátku, protože to je místo, kde stojí hráč, co je zrovna na tahu. Známe taky rychlost a směr hodu, protože ten hráč zadá. Známe gravitační zrychlení a tření vzduchu. Právě kvůli tomu tření už trajektorie není obyčejná parabola (x2), ale bude trošku spláclá k jedné straně. Spočítat, jak takový banán poletí, je nad rámec středoškolské fyziky a matematiky, přitom ale vlastně o nic nejde. Fígl je v tom, že si nebudeme brát moc velká sousta: zkusíme spočítat, kde banán je po první vteřině, a z toho pak dopočítáme, kam doletí po druhé vteřině a tak dál.

Když se banán pohybuje vteřinu nějakou rychlostí, stačí k jeho poloze tu rychlost prostě přičíst. Podobně, když na jeho rychlost vteřinu působí gravitační zrychlení, stačí přičíst to zrychlení směrem dolů k jeho rychlosti. Tření vzduchu rychlost banánu vynásobí nějakým číslem, které závisí na jeho rychlosti a aerodynamických vlastnostech, a které budeme ještě muset nějak spočítat. Vynechme zatím detaily. Vidíme, že po každé vteřině budeme muset nějak přepočítat nejen umístění banánu, ale i jeho rychlost. Stačí to vyjádřit matematickými vzorečky, jakým bude rozumět počítač, a máme hotovo.

Úhel a rychlost

Gravitace má vliv na rychlost jenom ve svislém směru. Rychlost ve svislém směru ale na začátku neznáme: uživatel zadává úhel a celkovou rychlost. Namalujeme si tedy obrázek pravoúhlého trojúhelníka, kde přepona je celková rychlost a odvěsny jsou rychlost ve svislém a vodorovném směru, a vidíme, že:

Jediná past zbývá v tom, že počítač pracuje s úhly v radiánech, takže číslo zadané uživatelem musíme vynásobit π/180.

Když bychom naopak chtěli spočítat celkovou rychlost z vodorovné a svislé, použijeme prostě Pythagorovu větu:

Úhel by šel spočítat taky, ale to naštěstí nebude potřeba.

Tření vzduchu

Aerodynamika je složitá věc, tak ji vezmeme jen hodně zběžně. Tření ve vzduchu (narozdíl třeba od tření, když se něco šoupe po povrchu) roste s druhou mocninou rychlosti:

Síla je trochu na obtíž, nejradši bychom vystačili jenom s rychlostí a zrychlením. Abychom se s ní popasovali, nenápadně si vycucáme z prstu, že banán má hmotnost 1 kg. Potom už nám vyjde jasný vzoreček, čím máme rychlost po každé vteřině vynásobit: Násobíme ji číslem (1 - celkova_rychlost · nejaka_aerodynamicka_konstanta), což by mělo být jen o nepatrný kousek menší než 1, jinak by bylo tření hrozně velké a banán by nikam nedoletěl. V kódu programu se osvědčilo nastavit nejaka_aerodynamicka_konstanta = 0.001 – to je fakt nepatrný kousek.

Hotový program

To je všechno! Kód máte napsaný ve funkci vystrel(hrac). Pročtěte si ji a zkuste si vyjasnit, co a proč se tam počítá zrovna takhle. Kontrolní otázky, že máte jasno:

K zamyšlení

  1. Kam bychom v kódu programu měli dopsat zjišťování, jestli jsme zasáhli protihráče? Jestli si to chcete vyzkoušet, může se vám hodit funkce alert(zpráva).
  2. Známe přesný tvar terénu v místě, odkud házíme. Pod jakým úhlem musíme banán hodit, abychom si ho nehodili pod nohy? Jak to zjistit v programu?
  3. Jestli se chcete pocvičit v matematice a fyzice, můžete si odvodit to násobení (1 - celkova_rychlost · nejaka_aerodynamicka_konstanta). Je to výpočet na dva nebo tři řádky, když ho vezmete za správný konec.

Mimochodem: obecně se takovéhle simulace nazývají metoda konečných prvků a používají se ve vědě dost často.