Jak tohle realisticky simulovat?
Ve fyzice se učíme mechaniku rázu. Tam je ale všechno krásně jednoduché: máme dvě tělesa, víme o nich, že se srazí a dosazením do vzorečku určíme výslednou rychlost. Jak prosté. My ale nepotřebujeme vyřešit srážku v 1D, ale ve 2D nebo 3D a hlavně musíme nejdřív nějak zjistit, jestli k ní vůbec dojde.
Popisovat budu postup pro 2D, ale jednoduchým přidáním třetí souřadnice se dá aplikovat i na 3D.
Tělesa jsou určena těmito parametry: polohou (x, y), rychlostí (vx, vy) a hmotností (m). Fyzika předpokládá hmotnost v kilogramech a rychlost v metrech za sekundu, ale s převodem jednotek si nemusíme dělat starosti - v jakých jednotkách dosadíme vstupní hodnoty, v takových nám vyjdou výsledky.
Tělesa se srazí, pokud:
Podmínka blízkosti je jednoduchá: pokud absolutní hodnoty rozdílů souřadnic v obou osách (|x1-x2| a |y1-y2|) jsou menší než nějaké námi zvolené minimum (které závisí zřejmě na rozměrech těles), jsou tělesa dostatečně blízko. Používat na výpočet vzdálenosti Pythagorovu větu je celkem zbytečné. V některých případech bychom sice získali přesnější výsledky (tělesa by byla pomyslně ohraničena kružnicemi a ne čtverci), ale buď bychom museli odmocňovat (což je zdlouhavé), nebo pracovat s hodně velkými čísly (integer2 = longint).
Jestli se tělesa pohybují směrem k sobě, zjistíme tak, že porovnáme vzdálenost teď: |x1-x2| se vzdáleností v příští iteraci: |(x1+vx1)-(x2+vx2)| (předpokládám diskrétní pohyb těles, kdy v každé iteraci přičítáme k souřadnicím hodnoty rychlostí). Pokud se vzdálenost zmenšila, tělesa se pohybují k sobě a ve směru příslušné osy dojde ke srážce. To samé potom provedeme pro osu y.
Srážku vyřešíme pro každou souřadnici samostatně. Zjistíme, jestli se v tom směru srazí (viz předchozí odstavec) a pak použijeme vzorečky:
k je tzv. koeficient restituce rázu, který udává, jak pružně se tělesa chovají. Může nabývat hodnot od 0 (dokonale plastický ráz, tělesa se po nárazu "slepí" a dál se pohybují společně) do 1 (dokonale pružný ráz, tělesa od sebe odskočí jako ideální kulečníkové koule). Optimální hodnota pro běžné situace (srážka dvou aut a podobně) je cca 0.2, vyzkoušejte si dle potřeby.
v je společná rychlost, jakou by se obě tělesa pohybovala po dokonale plastickém rázu. Pokud vůbec nechcete počítat s pružným rázem, bude toto výsledek, jinak se v použije jen jako mezivýsledek do dalších dvou vzorců.
vi jsou výsledné rychlosti obou těles po srážce, vip jsou jejich původní rychlosti před srážkou a mi jsou jejich hmotnosti.
Tento výpočet zopakujeme odděleně pro osy x a y (a z, jestli pracujeme ve třech rozměrech). Je výhodné napsat si na to podprogram (proceduru).
Jediné hodnoty, které se srážkou mění, jsou rychlosti těles. Hmotnost zůstává konstantní, poloha (souřadnice) se mění v každém cyklu nezávisle na srážkách.