Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Řešení srážky pohybujících se hmotných objektů v rovině a prostoru

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.

1) Dojde ke srážce?

Tělesa se srazí, pokud:
a) jsou dostatečně blízko
b) pohybují se směrem k sobě

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é. Získali bychom sice asi přesnější výsledky (tělesa by byla pomyslně ohraničena kružnicemi a ne čtverci), ale museli bychom počítat s odmocninou, což někdy může zdržovat. Navíc to nejde použít na podlouhlá tělesa.

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.

2) Jak se tělesa budou po srážce pohybovat?

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:

<center></center>



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 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.

 


 

Všechny články v sekci
Fyzikální algoritmy
Článek pro vás napsal Mircosoft
Avatar
Uživatelské hodnocení:
2 hlasů
Autor je amatérský pascalista, assemblerista a bastlíř. Profesionálně psal nebo píše v HLASM, Rexxu, Cobolu, ST, LAD, FBD, PHP, SQL, JS, Basicu a pár dalších jazycích, které kupodivu stále existují a používají se :-).
Aktivity