Programuji animaci odrážejícího míčku a chci, aby to bylo co nejrealističtější.
Plně chápu fyziku, zatímco míč stoupá a klesá: Zrychluje dolů rychlostí 9,8 metrů / s / s.
Ale jakmile dopadne na zem, jsem ztracen. Vím, že zažívá určitou kompresi, která ji znovu přenáší rychlostí nahoru, přičemž gravitace je opět jedinou silou, která na ni působí. Ale nevím, jak modelovat kompresi a vychýlení míče dopadajícího na zem.
(Také se zabývám pouze striktně vertikální lineární rychlostí a zrychlením. Míč se vůbec nepohybuje vodorovně ani se neotáčí. A předpokládám zanedbatelnou ztrátu odporu vzduchu.)
Vím, že je třeba se zabývat konstantami: kolik míč odolává kompresi a kolik energie se při odrazu ztratí, ale nevím, jak spolu souvisejí.
Může mi někdo dát vysvětlení s jedním nebo dvěma odstavci a / nebo (a) vzorec (e) a / nebo nasměrovat mě na zdroj, kde si mohu přečíst více? (ano, vyhledáváním jsem už strávil asi hodinu)
Jsem rád, že o tom budu dál číst, dokud nepochopím, v tuto chvíli nevím, kam se obrátit.
Předem děkujeme!
Komentáře
- Stačí otočit znaménko rychlosti a snížit rychlost o procento.
- Je tvar koule vždy kruhový nebo chcete také simulovat deformace?
- Relevantní odpověď: physics.stackexchange.com/ a / 254379/392
- Rod Cross se zdá být autoritou v oblasti skákacích míčků. Jeden z jeho příspěvků: physics.usyd .edu.au / ~ cross / PUBLICATIONS / BallBounce.pdf a stránka se seznamem dalších odkazů: real-world-physics-problems.com/bouncing-ball -physics.html
Odpověď
Říkáte, že ignorujete tření vzduchu, ale předpokládejme částečně nepružnou kolizi. To znamená, že můžeme problém prolomit dvě části:
- Zatímco míč není v kontaktu se zemí, výška v čase $ t $ po posledním odrazu v $ t_0 $ je dána $$ h (t + t_0) = v_0 t – \ frac12 gt ^ 2 $$, kde $ v_0 $ je rychlost těsně po odrazu. Tato rychlost se bude měnit od jednoho odrazu k druhému.
- Během nárazu se koule deformuje a dojde k tření. Přesný tvar míče během nárazu je těžké zachytit jednoduchou rovnicí, protože závisí na složení míče a podlahy. Jako zjednodušující předpoklad považujte míč za „hmotu na mírně ztrátové pružině s jarní konstantou $ k $“; poté bude míč během nárazu vykazovat (přibližně) tlumený jednoduchý harmonický pohyb: to znamená, že doba nárazu bude nezávislá na rychlosti nárazu (!)
Koeficient restituce je parametr koule / povrchu a odráží zlomek rychlosti těsně po odrazu dělený rychlostí těsně před. U golfového míčku to může být až 0,8; u tenisového míčku je to kolem 0,75.
Při použití $ \ rho = 0,75 $, pokud upustíte míč z výšky 5 m (a uvedení $ g = 10 ~ m / s ^ 2 $ pro pohodlí) přistálo by to po 1 sekundě rychlostí 10 m / s a po odrazu (nějaký krátký čas $ \ Delta t $) by to zase přišlo s nižší rychlostí $ v_1 = 7,5 m / s $. Čas strávený ve vzduchu do dalšího odrazu je dán $$ t_1 = 2 \ frac {v_1} {g} = 2 \ rho \ frac {v_0} {g} $$
Zatímco míč je v kontaktu se zemí, můžeme uvažovat, že se jeho střed pohybuje přibližně sinusovým způsobem – jak jsem řekl, důležité je, že doba kontaktu je nezávislá na výšce pádu (za předpokladu lineární konstanty pružiny). Ve skutečnosti, jak se koule více deformuje, pružinová konstanta se zvýší – což ve skutečnosti zkrátí dobu kontaktu, protože je vyšší rychlost nárazu. Ale pro vaši simulaci je nepravděpodobné, že by na tom záleželo.
Chcete-li přejít z výše uvedeného na „matematický model“, možná budete chtít tento pythonovský kód upravit podle svých potřeb:
from math import sqrt import matplotlib.pyplot as plt h0 = 5 # m/s v = 0 # m/s, current velocity g = 10 # m/s/s t = 0 # starting time dt = 0.001 # time step rho = 0.75 # coefficient of restitution tau = 0.10 # contact time for bounce hmax = h0 # keep track of the maximum height h = h0 hstop = 0.01 # stop when bounce is less than 1 cm freefall = True # state: freefall or in contact t_last = -sqrt(2*h0/g) # time we would have launched to get to h0 at t=0 vmax = sqrt(2 * hmax * g) H = [] T = [] while(hmax > hstop): if(freefall): hnew = h + v*dt - 0.5*g*dt*dt if(hnew<0): t = t_last + 2*sqrt(2*hmax/g) freefall = False t_last = t + tau h = 0 else: t = t + dt v = v - g*dt h = hnew else: t = t + tau vmax = vmax * rho v = vmax freefall = True h = 0 hmax = 0.5*vmax*vmax/g H.append(h) T.append(t) print("stopped bouncing at t=%.3f\n"%(t)) plt.figure() plt.plot(T, H) plt.xlabel("time") plt.ylabel("height") plt.title("bouncing ball")
Tento kód vytváří následující graf:
Odpověď
Obtíž je, když je míč v kontaktu se zdí. Několik věcí, které můžete zvážit.
- elastický dopad. V takovém případě můžete míč považovat za pružnou pružinu. Když nárazem narazí na stěnu rychlostí, kinetická energie se převede na potenciální energii pružiny. A poté, co dosáhne maximální deformace, kulička vyskočí zpět do vesmíru. Směr deformace je ke zdi normální.
- nepružný dopad. Je to podobné jako výše, kromě toho, že koule obnovuje pouze zlomek kinetické energie. To je blíže realitě. Ztráta se obvykle popisuje pomocí koeficientu restituce.
- nepružný náraz s třením. Když míč narazí na zeď pod úhlem, může kulička klouzat po povrchu. To se blíží realitě.
- odpor vzduchu. Když se míč pohybuje v prostoru, existuje síla vzduchu, která ho zpomaluje.
Komentáře
- Lituji, myslím, že jsem nebyl ' dostatečně jasný. ' mluvím o částečně nepružném dopadu. Z mého původního příspěvku " … kolik energie se při odrazu ztratí … ". Také jsem v původním příspěvku zmínil, že ' ignoruji odpor vzduchu (" … I ' m za předpokladu zanedbatelné ztráty odporu vzduchu … ") a já se ' nepokouším modelovat hybnost do strany (" nepružný náraz s třením "). Chci jen modelovat kompresi, zpomalení, dekompresi a zrychlení, ke kterým dochází při nárazu na zem, a ztrátu energie vlastní celému procesu.
Odpověď
Vizuální řešení (nyní Altair) vyrábí software VisSim. Zde je ukázkové blokové schéma, které použili k simulaci skákací koule:
Bloky $ 1 / s $ jsou integrační bloky z knihovny VisSim.
Graf odrážející koule s těmito parametry je uveden níže.
Máte-li zájem o jeho spuštění, demo obsahuje instalaci a bezplatnou 60denní zkušební verzi si můžete stáhnout zde