Modell / formel för studsande boll

Jag programmerar en animering av en studsande boll, och jag vill att den ska vara så realistisk som möjligt.

Jag förstår fysiken helt och hållet medan bollen stiger och faller: Den accelererar nedåt på 9,8 meter / sekund / sekund.

Men när den träffar marken, förlorade jag. Jag vet att den upplever en viss kompression som översätter den ”s hastighet uppåt igen, vid vilken tidpunkt tyngdkraften återigen är den enda kraft som verkar på den. Men jag vet inte hur man ska modellera kompression och avböjning av bollen som träffar marken.

(Dessutom har jag bara att göra med strikt vertikal linjär hastighet och acceleration. Bollen rör sig inte horisontellt eller roterar alls. Och jag antar försumbar förlust av luftmotstånd.)

Jag vet att det finns konstanter att hantera: hur mycket bollen motstår kompression och hur mycket energi som går förlorad under studsan, men jag vet inte hur de är relaterade.

Kan någon ge mig en förklaring på en eller två stycken och / eller (a) formel (e) och / eller peka på en resurs där jag kan läsa mer? (ja, jag har redan spenderat en timme på att googla det)

Jag är glad att fortsätta läsa om det tills jag förstår, jag vet bara inte vart jag ska vända mig nu.

Tack på förhand!

Kommentarer

Svar

Du säger att du ignorerar luftens friktion, men anta en delvis oelastisk kollision. Det betyder att vi kan bryta in problemet två delar:

  1. Medan bollen inte är i kontakt med marken ges höjden vid tiden $ t $ efter den senaste studsan på $ t_0 $ av $$ h (t + t_0) = v_0 t – \ frac12 gt ^ 2 $$ där $ v_0 $ är hastigheten strax efter studsan. Denna hastighet kommer att ändras från en studs till en annan.
  2. Under kollisionen kommer bollen att deformeras och det blir friktion. Den exakta formen på bollen under kollisionen är svår att fånga i en enkel ekvation eftersom det beror på kulans sammansättning och golvet. Som ett förenklat antagande, anse bollen som en ”massa på en något förlorad fjäder med en fjäderkonstant $ k $”; då kommer bollen att uppvisa (ungefärligt) dämpad enkel harmonisk rörelse under kollisionen: detta innebär att kollisionstiden blir oberoende av kollisionshastigheten (!)

Restitutionskoefficienten är en parameter för en boll / yta och reflekterar hastighetsfraktionen strax efter studsen dividerad med hastigheten strax före. För en golfboll kan den vara så hög som 0,8; för en tennisboll är det cirka 0,75.

Med $ \ rho = 0,75 $, om du släpper en boll från en höjd av 5 m (och sätter $ g = 10 ~ m / s ^ 2 $ för bekvämlighet) skulle den landa efter 1 sekund med en hastighet på 10 m / s, och efter studsan (någon kort tid $ \ Delta t $) skulle den komma upp igen med en lägre hastighet $ v_1 = 7,5 m / s $. Tiden i luften tills nästa studs ges av $$ t_1 = 2 \ frac {v_1} {g} = 2 \ rho \ frac {v_0} {g} $$

Medan bollen är i kontakt med marken, kan vi betrakta dess centrum att röra sig på ett ungefär sinusformat sätt – som sagt, det viktiga är att kontakttiden är oberoende av fallhöjden (med antagandet om linjär fjäderkonstant). I verkligheten, när kulan deformeras mer, kommer fjäderkonstanten att öka – vilket faktiskt kommer att göra kontakttiden kortare då kollisionshastigheten är högre. Men för din simulering är det osannolikt att det spelar någon roll.

För att komma från ovan till en ”matematisk modell” kanske du vill ändra den här pythonkoden efter dina behov:

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") 

Den här koden producerar följande plot:

ange bildbeskrivning här

Svar

Tja, svårigheten är när bollen är i kontakt med väggen. Få saker du kan tänka på.

  • elastisk effekt. I det här fallet kan du behandla bollen som en elastisk fjäder. När den påverkar väggen med en hastighet, kommer den kinetiska energin att omvandlas till fjäderns potentiella energi. Och sedan, efter att den uppnått maximal deformation, kommer bollen att fjädra tillbaka ut i rymden. Deformationsriktningen är normal mot väggen.
  • oelastisk inverkan. Detta liknar ovanstående förutom att bollen bara återvinner en bråkdel av kinetisk energi. Detta är närmare verkligheten. Förlusten beskrivs vanligtvis med hjälp av restitutionskoefficienten.
  • oelastisk inverkan med friktion. När bollen träffar en vägg med en vinkel kan bollen glida på ytan. Detta blir närmare verkligheten.
  • luftmotstånd. När bollen rör sig är rymden finns det luftmotståndskraft som saktar ner den.

Kommentarer

  • Tyvärr var jag inte ' inte tillräckligt tydlig. Jag ' jag pratar om delvis oelastisk påverkan. Från mitt ursprungliga inlägg " … hur mycket energi går förlorat under studsen … ". Jag nämnde också i det ursprungliga inlägget att jag ' jag ignorerar luftmotstånd (" … I ' jag antar försumbar förlust av luftmotstånd … "), och jag ' försöker inte modellera momentum i sidled (" oelastisk inverkan med friktion "). Jag vill bara modellera kompression, retardation, dekompression och acceleration som inträffar vid kollision med marken och energiförlusten som är inneboende i hela processen.

Svar

Visual Solutions (Now Altair) gör VisSim Software. Här är ett demoblockschema som de har använt för att simulera en studsande boll: ange bildbeskrivning här

$ 1 / s $ -blocken är integratorblock från VisSim-biblioteket.

Diagrammet för den studsande bollen med dessa parametrar visas nedan.

ange bildbeskrivning här

Om du är intresserad av att köra detta kommer demo med installationen och du kan ladda ner en gratis 60-dagars provperiod här

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *