Jeg programmerer en animasjon av en sprettkule, og jeg vil at den skal være så realistisk som mulig.
Jeg forstår fysikken fullt ut mens ballen stiger og faller: Den akselererer nedover på 9,8 meter / sekund / sekund.
Men når den treffer bakken, mistet jeg. Jeg vet at den opplever en viss kompresjon som oversetter den «s hastighet oppover igjen, på hvilket tidspunkt tyngdekraften igjen er den eneste kraften som virker på den. Men jeg vet ikke hvordan jeg skal modellere kompresjon og avbøyning av ballen som treffer bakken.
(Dessuten har jeg bare å gjøre med vertikal lineær hastighet og akselerasjon. Kulen beveger seg ikke horisontalt eller roterer i det hele tatt. Og jeg antar ubetydelig tap av luftmotstand.)
Jeg vet at det er konstanter å håndtere: hvor mye ballen motstår kompresjon og hvor mye energi som går tapt under sprett, men jeg vet ikke hvordan de er relatert.
Kan noen gi meg en forklaring på ett eller to avsnitt og / eller (a) formel (e) og / eller peke meg på en ressurs der jeg kan lese mer? (ja, jeg har allerede brukt en time eller så på å google det)
Jeg er glad for å fortsette å lese om det til jeg forstår, jeg vet bare ikke hvor jeg skal henvende meg på dette punktet.
På forhånd takk!
Kommentarer
- Bare snu hastighetstegnet og reduser hastigheten med en prosentandel.
- Er formen på ballen alltid sirkulær, eller vil du også simulere deformasjoner?
- Relevant svar: physics.stackexchange.com/ a / 254379/392
- Rod Cross ser ut til å være en autoritet om sprettende baller. Et av hans papirer: physics.usyd .edu.au / ~ cross / PUBLICATIONS / BallBounce.pdf , og en side med flere lenker: real-world-physics-problems.com/bouncing-ball -fysikk.html
Svar
Du sier at du ignorerer luftfriksjon, men anta en delvis uelastisk kollisjon. Det betyr at vi kan bryte problemet inn to deler:
- Mens ballen ikke er i kontakt med bakken, blir høyden på tiden $ t $ etter den siste spretten på $ t_0 $ gitt av $$ h (t + t_0) = v_0 t – \ frac12 gt ^ 2 $$ der $ v_0 $ er hastigheten like etter sprett. Denne hastigheten vil forandre seg fra en sprett til en annen.
- Under støten vil ballen deformeres og det blir friksjon. Den nøyaktige formen på ballen under støten er vanskelig å fange i en enkel ligning, fordi den avhenger av ballens sammensetning og gulvet. Som en forenkling antagelse, anser ballen som en «masse på en litt tapende fjær med en vårkonstant $ k $»; da vil ballen utvise (omtrent) dempet enkel harmonisk bevegelse under støt: dette betyr at støtetiden vil være uavhengig av slaghastigheten (!)
restitusjonskoeffisienten er en parameter for en ball / overflate, og gjenspeiler brøkdelen av hastighet like etter spretten delt på hastigheten like før. For en golfball kan denne være så høy som 0,8; for en tennisball er den rundt 0,75.
Bruk av $ \ rho = 0,75 $, hvis du slipper en ball fra en høyde på 5 m (og setter $ g = 10 ~ m / s ^ 2 $ for bekvemmelighet) vil den lande etter 1 sekund med en hastighet på 10 m / s, og etter spretten (litt kort tid $ \ Delta t $) vil den komme opp igjen med en lavere hastighet $ v_1 = 7,5 m / s $. Tiden brukt i luften til neste sprett er gitt av $$ t_1 = 2 \ frac {v_1} {g} = 2 \ rho \ frac {v_0} {g} $$
Mens ballen er i kontakt med bakken, kan vi betrakte sentrum for å bevege seg på en omtrent sinusformet måte – som jeg sa, er det viktige at kontakttiden er uavhengig av fallhøyden (på antagelsen om lineær fjærkonstant). I virkeligheten, når ballen deformeres mer, vil fjærkonstanten øke – noe som faktisk vil gjøre kontakttiden kortere ettersom slaghastigheten er høyere. Men for simuleringen din er det lite sannsynlig.
For å komme fra ovennevnte til en «matematisk modell» vil du kanskje endre denne pythonkoden etter dine 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")
Denne koden produserer følgende plot:
Svar
Vel, problemet er når ballen er i kontakt med veggen. Få ting du kan vurdere.
- elastisk innvirkning. I dette tilfellet kan du behandle ballen som en elastisk fjær. Når den påvirker veggen med en hastighet, vil den kinetiske energien konverteres til fjærens potensielle energi. Og så, etter at den når maksimal deformasjon, vil ballen springe tilbake i rommet. Deformasjonsretningen er normal for veggen.
- uelastisk innvirkning. Dette ligner på det ovennevnte, bortsett fra at ballen bare gjenvinner en brøkdel av kinetisk energi. Dette er nærmere virkeligheten. Tapet beskrives vanligvis ved hjelp av restitusjonskoeffisienten.
- uelastisk innvirkning med friksjon. Når ballen treffer en vegg med en vinkel, kan ballen gli på overflaten. Dette blir nærmere virkeligheten.
- luftmotstand. Når ballen beveger seg er det plass, er det luftmotstand for å bremse den ned.
Kommentarer
- Beklager, jeg antar at jeg ikke var ' ikke klar nok. Jeg ' jeg snakker om delvis uelastisk innvirkning. Fra mitt opprinnelige innlegg " … hvor mye energi går tapt under spretten … ". Også nevnte jeg i det opprinnelige innlegget at jeg ' m ignorerer luftmotstand (" … I ' Jeg antar ubetydelig tap av luftmotstand … "), og jeg ' prøver ikke å modellere momentum i siden (" uelastisk innvirkning med friksjon "). Jeg vil bare modellere kompresjon, retardasjon, dekompresjon og akselerasjon som oppstår under støt med bakken, og tap av energi som ligger i hele prosessen.
Svar
Visual Solutions (Now Altair) lager VisSim-programvare. Her er et demoblokkdiagram som de har brukt til å simulere en sprettkule:
$ 1 / s $ -blokkene er integratorblokker fra VisSim-biblioteket.
Plottet til den hoppende kulen med disse parametrene er vist nedenfor.
Hvis du er interessert i å kjøre dette, kommer demoen med installasjonen og du kan laste ned en gratis prøveperiode på 60 dager her