Práce s čísly

Pro práci s čísly existuje knihovna math. Funguje stejně jako knihvna string, jen s jinýma funkcema pochopitelně. A my se na ty funkce podíváme. Pozor: Nebudu zde vysvětlovat matematiku ale funkce které používá Lua!

Matematické konstanty

math.pi - konstanta reprezentující pi. Hodnota je 3.14159265359.

math.huge - konstanta reprezentující +nekonečno. Úplně zbytečně ale je tu.

Konstanty se nepíší se závorky! Uvidíte v následujících příkladech.

math.cos , math.sin , math.tan

Tyto funkce mají jen jeden vstupní parametr - hodnotu úhlu v radiánech - a jeden výstup - hodnotu sinu, cosinu a tangens.

1
2print(math.sin(math.pi));
3-- "0"
4print(math.cos(math.pi));
5-- "-1"
6print(math.tan(math.pi));
7-- "0"
8

math.cosh , math.sinh , math.tanh

Funkce jako math.cos , math.sin , math.tan akorát vrací hyperbolickou hodnotu těchto funkcí. Někdy se může hodit. Absolutně netuším co to je hyperbolický sinus nebo tak, ale má to hezké grafy.

1
2print(math.sinh(math.pi));
3-- "11.548739"
4print(math.cosh(math.pi));
5-- "11.591953"
6print(math.tanh(math.pi));
7-- "0.996272"
8

math.abs

Funkce vrací absolutní hodnotu daného čísla. Číslo může být i desetinné.

1print(math.abs(61));
2-- "61"
3print(math.abs(-39));
4-- "39"

math.acos, math.asin

Funkce arcus sinus a arcus cosinus - obrácená hodnota sinu a cosinu. Příklad:

1print(math.asin(0));
2-- "0"
3print(math.acos(1));
4-- "0"

math.atan, math.atan2

Arcus tangens ve dvou podobách. Funkce atan má pouze jeden vstupní parametr a to podíl tangesn. Funkce atan2 má dva vstupní parametry - sinus a cosinus. Oba dva vracejí hodnotu arcus tangens.

1local c,s = math.cos(math.pi*2),math.sin(math.pi*2);
2print(math.atan(s/c));
3-- "6.28318530"
4print(math.atan2(s,c));
5-- "6.28318530"

math.ceil, math.floor

Tyto funkce slouží k zaokrouhlování. Ceil zaokrouhluje nahoru a floor dolů. Neexistuje žádná funkce která by zaokrouhlovala od 5 nahoru a jinak dolů. Ovšem tato funkce je jednoduchá na sestrojení. Ceil i floor mají jeden vstupní parametr - číslo - a jeden výstup - celé číslo.

1print(math.ceil(123.4646));
2-- "124"
3print(math.floor(68416.94886));
4-- "68416"

math.exp, math.log

Funkce vracející výsledek matematického zápisu. Exp vrací e (2.71828182846) umocněný o vstupní hodnotu (math.exp = e^vstupni_hodnota). Funkce log vrací hodnotu přirozeného logaritmu.

1print(math.exp(0))
2-- "1"
3print(math.exp(1))
4-- "2.718281828459"
5print(math.exp(27))
6-- "532048240601.8"
7print(math.log(532048240601))
8-- "26.999999999998"
9print(math.log(3))
10-- "1.0986122886681"
11

math.log10

Vrací hodnotu dekadického logaritmu. Vstupní hodnota musí bát kladná.

1print(math.log10(100));
2-- "2"

math.pow, math.sqrt

Funkce pow umocní číslo s tím, že první vstupní parametr je základ a druhým vstupním parametrem je exponent. Funkce sqrt naopak odmocňuje (druhá odmocnina).

1print(math.pow(3,3));
2-- "27"
3print(math.sqrt(25));
4-- "5"

math.min, math.max

Ve hře využívané funkce. Jedna vrací minimální hodnotu ze všech zadaných (min) a druhá hodnotu maximální (max). Počet vstupních parametrů je neomezen.

1print(math.min(1,2));
2-- "1"
3print(math.min(1.2, 7, 3));
4-- "1.2"
5print(math.min(1.2, -7, 3));
6-- "-7"
7print(math.max(1.2, -7, 3));
8-- "3"
9print(math.max(1.2, 7, 3));
10-- "7"

math.modf

Funkce vrátí celočíselnou a desetinnou část zadaného čísla - návratové jsou tedy dvě hodnoty, vstupní pouze jedna.

1local a,b = math.modf(5.3);
2print("Celociselna cast: "..5..", desetinna cast: "..b);
3-- "Celociselna cast: 5, desetinna cast: 0.3"

math.random, math.randomseed

Tyto funkce slouží ke generování náhodných čísel. Funkcí randomseed se nastaví klíč k pseudo-náhodnému generátoru. Poté můžeme používat funkcí random s téměř 100% jistotou že dané číslo bude náhodné. Můžeme používat random bez použití předchozí funkce, ale nezaručuji 100% funkčnost. Vzhledem k tomu, že čísla jsou vybíráná na základě klíče, nenastavujte ho v cyklu před random. V takovém případě by byly výsledky téměř totožné.

Funkce randomseed má jenom jeden vstupní parametr - celé číslo jako klíč - a žádný výstup.

Funkce random má nula až dva vstupní parametry. Podle toho co zadáme se funkce chová.

  1. math.random(); - pokud nezadáme žádný parametr, funkce generuje desetinné číslo z intervalu <0;1>

  2. math.random(celé_číslo); - pokud zadáme pouze jeden parametr, funkce generuje celé číslo z intervalu <1;celé_číslo>

  3. math.random(celé_číslo,celé_číslo2); - pokud zadáme oba možné parametry, funkce generuje celé číslo z intervalu <celé_číslo;celé_číslo2>

Příklad:

1math.randomseed(123456789);
2print(math.random());
3-- "0.675786"
4math.randomseed(123456789);
5print(math.random());
6-- "0.675786"
7print(math.random(651));
8-- "244.000000"
9print(math.random(651));
10-- "69.000000"
11print(math.random(-100,100));
12-- "-62.000000"
13print(math.random(5,100));
14-- "9.000000"

Související video

Soubory ke stažení

  1. mujskript.lua