Integrály

Tento studijní text vznikl pro účely seriálu o počítačové grafice a shaderech, a popisuje jen to nejnutnější pro jeho pochopení.

Představte si, že píšete nějakou hru, kde hráč může skákat. Nachází se v nějaké pozici (výšce) h na ose Y, má svou aktuální vertikální rychlost v a dolů ho přitahuje gravitace o zrychlení g. Ostatní osy pohybu zanedbáváme.

Logiku hry vyhodnocuje nějaká smyčka, která se spustí každých t sekund. V každé její iteraci chceme spočítat novou pozici (vlastně jen výšku) a rychlost hráče na základě předchozí pozice a rychlosti, a také času, který od minulé iterace uplynul. Jak by něco takového mohlo vypadat v pseudokódu?

// Varianta A:

h = h + v * t;
v = v + g * t;

// Varianta B:

v = v + g * t;
h = h + v * t;

Která z variant je ale správně? Spočítáme nejdřív novou pozici pomocí staré rychlosti a pak rychlost updatujeme, nebo nejdřív spočítáme novou rychlost a tu použijeme pro spočítání pozice?

Správně není ani jedno. Kdybyste zkusili takovou hru spustit s reálným gravitačním zrychlením, postava by se chovala velice divně. Důvod je ten, že v reálném světě by se rychlost postavy neměnila v oddělených krocích, ale plynule během celého časového úseku t.

Vyjádříme si rychlost v jako funkci f závislou na t. Ve variantě A vlastně používáme pro celý časový úsek hodnotu rychlosti z bodu va, ve variantě B hodnotu vb.

Aproximace obdélníky

Pozici v obou variantách změníme o hodnotu vt, ať už jako v použijeme va nebo vb. Všimněte si, že tato hodnota odpovídá obsahu obdélníku výšky v a šířky t. Nyní je z obrázku patrné, že k pozici nechceme přičítat ani jeden z obdélníků, ale lichoběžník, jehož horní strana je tvořena funkcí f.

Jinak řečeno, zajímá nás obsah pod funkcí f. Toto vyjadřují integrály. S integrálem bychom pseudokód nahoře zapsali takto:

h = h + ∫
t
0
(v + gx) dx
v = v + gt

Znak pro integrál je a říká nám, že chceme spočítat obsah plochy pod danou funkcí, v našem případě v + gx. Zajímá nás jen plocha od bodu 0 do bodu t (bodem 0 uvažujeme počátek časového úseku, který nás zajímá) na vodorovné ose. Značení dx na konci říká, že se jedná o funkci proměnné x, právě hodnota x se bude měnit od 0 do t.

Pro výpočet tohoto integrálu můžeme použít obyčejnou geometrii, pomocí které spočítáme obsah lichoběžníku, který integrálu odpovídá. Jeho hodnota bude:

t
0
(v + gx) dx = vt +
1
2
g t2
Plocha pod funkcí

Zde jsme jen vzali obsah obdélníku pod původní hodnotou v a přičetli k němu obsah trojúhelníku od va do vb. A odtud se také bere vzorec pro zrychlení z fyziky.

V tomto případě šla funkce uvnitř integrálu zintegrovat velmi jednoduše. Ne vždy tomu tak je, v některých případech ani nelze řešení vyjádřit vzorečkem. Jedna možnost, jak alespoň číselně spočítat integrál nějaké složité funkce, je popsána v pátém díle seriálu o grafice.

Toto je ovšem jen extrémně stručné a zjednodušené vysvětlení integrálů, proto ho prosím berte trochu s rezervou.

Článek pro vás sepsal

Kuba Pelc