IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Riešenie zrážky pohybujúcich sa hmotných objektov v rovine a priestore

Ako toto realisticky simulovať?

Vo fyzike sa učíme mechaniku rázu. Tam je ale všetko krásne jednoduché: máme dve telesá, vieme o nich, že sa zrazí a dosadením do vzorca určíme výslednú rýchlosť. Ako prosté. My ale nepotrebujeme vyriešiť zrážku v 1D, ale v 2D alebo 3D a hlavne musíme najskôr nejako zistiť, či k nej vôbec dôjde.

Popisovať budem postup pre 2D, ale jednoduchým pridaním tretej súradnice sa dá aplikovať aj na 3D.

Telesá sú určené týmito parametrami: polohou (x, y), rýchlosťou (v x, v y) a hmotnosťou (m). Fyzika predpokladá hmotnosť v kilogramoch a rýchlosť v metroch za sekundu, ale s prevodom jednotiek si nemusíme robiť starosti - v akých jednotkách dosadíme vstupné hodnoty, v takých nám vyjdú výsledky.

1) Dôjde k zrážke?

Telesá sa zrazí, ak:
a) sú dostatočne blízko
b) pohybujú sa smerom k sebe

Podmienka jeho blízkosti je jednoduchá: ak absolútne hodnoty rozdielov súradníc v oboch osiach (| x1-x2 | a | y1-y2 |) sú menšie ako nejaké nami zvolenej minimum (ktoré závisia zrejme na rozmeroch telies), sú telesá dostatočne blízko.
Používať na výpočet vzdialenosti Pytagorovu vetu je celkom zbytočné. Získali by sme síce asi presnejšie výsledky (telesá by bola pomyselne ohraničená kružnicami a nie štvorci), ale museli by sme počítať s odmocninou, čo niekedy môže zdržovať. Navyše to nejde použiť na podlhovastá telesa.

Ak sa telesá pohybujú smerom k sebe, zistíme tak, že porovnáme vzdialenosť teraz: | x 1 -x 2 | so vzdialenosťou v budúcej iteráciu: | (x 1 + v x1) - (x 2 + v x2) | (Predpokladám diskrétne pohyb telies, kedy v každej iterácii pričítame k súradniciam hodnoty rýchlostí). Ak sa vzdialenosť zmenšila, telesá sa pohybujú k sebe a v smere príslušnej osi dôjde k zrážke. To isté potom vykonáme pre os y.

2) Ako sa telesá budú po zrážke pohybovať?

Zrážku vyriešime pre každú súradnicu samostatne. Zistíme, či sa v tom smere zrazí (pozri predchádzajúci odsek) a potom použijeme vzorčeky:

<center>Fyzikálne algoritmy </center>

k je tzv. koeficient reštitúcie rázu, ktorý udáva, ako pružne sa telesa správajú. Môže nadobúdať hodnoty od 0 (dokonale plastický ráz, telesá sa po náraze "slepí" a ďalej sa pohybujú spoločne) do 1 (dokonale pružný ráz, telesá od seba odskočí ako biliardové gule). Optimálna hodnota pre bežné situácie (zrážka dvoch áut a podobne) je cca 0.2, vyskúšajte si podľa potreby.

v je spoločná rýchlosť, akou by sa obe telesá pohybovala po dokonale plastickom rázu. Ak vôbec nechcete počítať s pružným razom, bude toto výsledok, inak sa v použije len ako medzivýsledok do ďalších dvoch vzorcov.

v i sú výsledné rýchlosti oboch telies po zrážke, v ip sú ich pôvodné rýchlosti pred zrážkou a m i sú ich hmotnosti.

Tento výpočet zopakujeme oddelene pre osi xay (az, či pracujeme v troch rozmeroch). Je výhodné napísať si na to podprogram (procedúru).

Jediné hodnoty, ktoré sa zrážkou menia, sú rýchlosti telies. Hmotnosť zostáva konštantný, poloha (súradnice) sa mení v každom cykle nezávisle na zrážkach.


 

Všetky články v sekcii
Fyzikálne algoritmy
Článok pre vás napísal Mircosoft
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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