Jeg programmerer en animation af en hoppende kugle, og jeg ønsker, at den skal være så realistisk som muligt.
Jeg forstår fysikken fuldt ud, mens bolden stiger og falder: Den accelererer nedad ved 9,8 meter / sekund / sekund.
Men når den først rammer jorden, tabte jeg. Jeg ved, at den oplever en vis kompression, der oversætter den “s hastighed opad igen, på hvilket tidspunkt tyngdekraften igen er den eneste kraft, der virker på den. Men jeg ved ikke, hvordan man skal modellere kompression og afbøjning af bolden, der rammer jorden.
(Desuden beskæftiger jeg mig kun med strengt lodret lineær hastighed og acceleration. Kuglen bevæger sig slet ikke vandret eller roterer. Og jeg antager ubetydeligt tab af luftmodstand.)
Jeg ved, at der er konstanter at håndtere: hvor meget bolden modstår kompression, og hvor meget energi der går tabt under hoppet, men jeg ved ikke, hvordan de er relateret.
Kan nogen give mig en forklaring på et eller to afsnit og / eller (a) formel (e) og / eller pege på en ressource, hvor jeg kan læse mere? (ja, jeg har allerede brugt en times tid på at google det)
Jeg er glad for at fortsætte med at læse om det, indtil jeg forstår, jeg ved bare ikke, hvor jeg skal henvende mig på dette tidspunkt.
På forhånd tak!
Kommentarer
- Vend bare tegnet på hastigheden, og reducer hastigheden med en procentdel.
- Er boldens form altid cirkulær, eller vil du også simulere deformationer?
- Relevant svar: physics.stackexchange.com/ a / 254379/392
- Rod Cross synes at være en autoritet med hensyn til hoppende bolde. Et af hans papirer: physics.usyd .edu.au / ~ cross / PUBLICATIONS / BallBounce.pdf , og en side med flere links: real-world-physics-problems.com/bouncing-ball -fysik.html
Svar
Du siger, at du ignorerer luftfriktion, men antage en delvist uelastisk kollision. Det betyder, at vi kan bryde problemet ind to dele:
- Mens bolden ikke er i kontakt med jorden, gives højden på tidspunktet $ t $ efter den sidste hopp på $ t_0 $ med $$ h (t + t_0) = v_0 t – \ frac12 gt ^ 2 $$ hvor $ v_0 $ er hastigheden lige efter bounce. Denne hastighed vil ændre sig fra en hoppe til den næste.
- Under stødet deformeres bolden, og der vil være friktion. Den nøjagtige form af bolden under stødet er svær at opfange i en simpel ligning, fordi det afhænger af boldens sammensætning og gulvet. Som en forenkling antagelse, betragt bolden som en “masse på en let tabsfjeder med en fjeder konstant $ k $”; så vil bolden udstille (ca.) dæmpet simpel harmonisk bevægelse under stødet: det betyder, at stødtiden vil være uafhængig af stødhastigheden (!)
Restitutionskoefficienten er en parameter for en kugle / overflade og afspejler hastighedsfraktionen lige efter hoppet divideret med hastigheden lige før. For en golfbold kan denne være så høj som 0,8; for en tennisbold er den omkring 0,75.
Brug af $ \ rho = 0,75 $, hvis du taber en bold fra en højde på 5 m (og lægger $ g = 10 ~ m / s ^ 2 $ for bekvemmelighed) landede det efter 1 sekund med en hastighed på 10 m / s, og efter hoppet (noget kort tid $ \ Delta t $) ville det komme op igen med en lavere hastighed $ v_1 = 7,5 m / s $. Tiden brugt i luften, indtil den næste bounce er givet af $$ t_1 = 2 \ frac {v_1} {g} = 2 \ rho \ frac {v_0} {g} $$
Mens bolden er i kontakt med jorden, kan vi betragte dens centrum til at bevæge sig på en omtrent sinusformet måde – som jeg sagde, er det vigtige, at kontakttiden er uafhængig af faldhøjden (under antagelse af lineær fjederkonstant). I virkeligheden, når kuglen deformeres mere, vil fjederkonstanten stige – hvilket faktisk vil gøre kontakttiden kortere, når slaghastigheden er højere. Men for din simulation er det usandsynligt, at det betyder noget.
For at komme fra ovenstående til en “matematisk model” vil du muligvis ændre denne pythonkode til 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 kode producerer følgende plot:
Svar
Nå er problemet, når bolden er i kontakt med væggen. Få ting du kan overveje.
- elastisk effekt. I dette tilfælde kan du behandle bolden som en elastisk fjeder. Når den påvirker væggen med en hastighed, omdannes den kinetiske energi til fjederens potentielle energi. Og derefter, efter at den har nået den maksimale deformation, springer bolden tilbage i rummet. Deformationsretningen er normal for væggen.
- uelastisk påvirkning. Dette svarer til ovenstående, bortset fra at bolden kun genvinder en brøkdel af kinetisk energi. Dette er tættere på virkeligheden. Tabet beskrives normalt ved hjælp af restitutionskoefficient.
- uelastisk påvirkning med friktion. Når bolden rammer en væg med en vinkel, kan bolden glide på overfladen. Dette bliver mere tæt på virkeligheden.
- luftmodstand. Når kuglen bevæger sig er plads, er der luftmodstandskraft, der bremser den.
Kommentarer
- Jeg var desværre ikke ' ikke klar nok. Jeg ' taler om delvist uelastisk påvirkning. Fra mit originale indlæg " … hvor meget energi der går tabt under hoppet … ". Jeg nævnte også i det oprindelige indlæg, at jeg ' m ignorerer luftmodstand (" … I ' Jeg antager ubetydeligt tab af luftmodstand … "), og jeg ' forsøger ikke at modellere momentum sidelæns (" uelastisk påvirkning med friktion "). Jeg vil bare modellere den kompression, deceleration, dekompression og acceleration, der opstår under påvirkning med jorden, og det tab af energi, der er forbundet med hele processen.
Svar
Visual Solutions (Nu Altair) fremstiller VisSim Software. Her er et demoblokdiagram, som de har brugt til at simulere en hoppende kugle:
$ 1 / s $ -blokkene er integratorblokke fra VisSim-biblioteket.
Plottet for den hoppende kugle med disse parametre er vist nedenfor.
Hvis du er interesseret i at køre dette, kommer demoen med installationen og du kan downloade en gratis 60 dages prøveperiode her