Programuję animację odbijającej się piłki i chcę, aby była jak najbardziej realistyczna.
W pełni rozumiem fizykę, gdy piłka wznosi się i opada: przyspiesza w dół z prędkością 9,8 metra / sekundę / sekundę.
Ale kiedy uderza w ziemię, jestem zagubiony. Wiem, że doświadcza pewnej kompresji, która przekłada jego prędkość ponownie w górę, w którym to momencie grawitacja jest znowu jedyną siłą działającą na niego. Ale nie wiem, jak modelować kompresję i ugięcie piłki uderzającej o ziemię.
(Mam też do czynienia tylko ze ściśle pionową prędkością liniową i przyspieszeniem. Piłka nie porusza się poziomo ani w ogóle nie obraca się. Zakładam też, że utrata oporu powietrza jest znikoma.)
Wiem, że istnieją stałe, z którymi trzeba sobie poradzić: jak bardzo piłka jest odporna na kompresję i ile energii jest tracone podczas odbicia, ale nie wiem, jak są one powiązane.
Czy ktoś może mi podać wyjaśnienie w jednym lub dwóch akapitach i / lub (a) wzór (e) i / lub wskazanie źródła, w którym mogę przeczytać więcej? (tak, spędziłem już około godziny, szukając go w Google)
Cieszę się, że mogę kontynuować czytanie o tym, dopóki nie zrozumiem, po prostu nie wiem, gdzie się teraz zwrócić.
Z góry dziękuję!
Komentarze
- Po prostu odwróć znak prędkości i zmniejsz prędkość o określony procent.
- Czy kształt piłki jest zawsze okrągły, czy chcesz również symulować odkształcenia?
- Odpowiednia odpowiedź: physics.stackexchange.com/ a / 254379/392
- Rod Cross wydaje się być autorytetem w dziedzinie odbijających się piłek. Jeden z jego artykułów: physics.usyd .edu.au / ~ cross / PUBLICATIONS / BallBounce.pdf i strona zawierająca więcej linków: real-world-physics-problems.com/bouncing-ball -physics.html
Odpowiedź
Mówisz, że ignorujesz tarcie powietrza, ale załóżmy częściowo nieelastyczną kolizję, co oznacza, że możemy podzielić problem dwie części:
- Gdy piłka nie styka się z podłożem, wysokość w chwili $ t $ po ostatnim odbiciu przy $ t_0 $ jest określona przez $$ h (t + t_0) = v_0 t – \ frac12 gt ^ 2 $$ gdzie $ v_0 $ jest prędkością tuż po odbiciu. Ta prędkość będzie się zmieniać od jednego odbicia do drugiego.
- Podczas uderzenia piłka odkształci się i nastąpi tarcie. Dokładny kształt piłki podczas uderzenia jest trudny do określenia w prostym równaniu, ponieważ zależy od składu piłki i podłoża. Dla uproszczenia przyjmijmy, że kulka jest „masą na lekko stratnej sprężynie ze stałą sprężystości $ k $”; wtedy piłka będzie wykazywać (w przybliżeniu) tłumiony prosty ruch harmoniczny podczas uderzenia: oznacza to, że czas uderzenia będzie niezależny od prędkości uderzenia (!)
Współczynnik restytucji jest parametrem piłki / powierzchni i odzwierciedla ułamek prędkości tuż po odbiciu podzielony przez prędkość tuż przed. W przypadku piłki golfowej wartość ta może wynosić nawet 0,8; dla piłki tenisowej to około 0,75.
Używając $ \ rho = 0,75 $, jeśli upuścisz piłkę z wysokości 5 m (i postawisz $ g = 10 ~ m / s ^ 2 $ za wygoda) wylądowałby po 1 sekundzie z prędkością 10 m / s, a po odbiciu (jakiś krótki czas $ \ Delta t $) wylądowałby ponownie z mniejszą prędkością $ v_1 = 7,5 m / s $. Czas spędzony w powietrzu do następnego odbicia wynosi $$ t_1 = 2 \ frac {v_1} {g} = 2 \ rho \ frac {v_0} {g} $$
Podczas gdy piłka jest w kontakcie z podłożem, możemy uznać, że jego środek porusza się w przybliżeniu sinusoidalnie – jak powiedziałem, ważne jest, aby czas kontaktu był niezależny od wysokości spadku (przy założeniu liniowej stałej sprężyny). W rzeczywistości, gdy kulka odkształca się bardziej, stała sprężystości wzrośnie – co w rzeczywistości skróci czas kontaktu wraz ze wzrostem prędkości uderzenia. Ale dla twojej symulacji, która raczej nie będzie miała znaczenia.
Aby przejść z powyższego do „modelu matematycznego”, możesz zmodyfikować ten kod Pythona do swoich potrzeb:
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")
Ten kod tworzy następujący wykres:
Odpowiedź
Cóż, trudność polega na tym, że piłka dotyka ściany. Kilka rzeczy, które możesz wziąć pod uwagę.
- elastyczny wpływ. W takim przypadku możesz potraktować piłkę jak sprężynę sprężystą. Gdy uderzy w ścianę z dużą prędkością, energia kinetyczna zostanie zamieniona na energię potencjalną sprężyny. A następnie, po osiągnięciu maksymalnego odkształcenia, kulka odbije się z powrotem w przestrzeń. Kierunek odkształcenia jest normalny dla ściany.
- nieelastyczne uderzenie. Jest podobne do powyższego, z wyjątkiem tego, że piłka odzyskuje tylko ułamek energii kinetycznej. Jest to bliższe rzeczywistości. Strata jest zwykle opisywana za pomocą współczynnika restytucji.
- nieelastyczne uderzenie z tarciem. Kiedy piłka uderza w ścianę pod kątem, może ślizgać się po powierzchni. To staje się bardziej bliskie rzeczywistości.
- opór powietrza. Kiedy piłka porusza się w przestrzeni, występuje siła oporu powietrza, która ją spowalnia.
Komentarze
- Przepraszam, wydaje mi się, że nie ' nie było wystarczająco jasne. ' mówię o częściowo nieelastycznym uderzeniu. Z mojego oryginalnego posta " … ile energii jest tracone podczas odbijania … ". Wspomniałem też w oryginalnym poście, że ' m ignoruję opór powietrza (" … I ' m zakładając znikomą utratę oporu powietrza … "), a ja ' nie próbuję modelować pędu na boki (" nieelastyczne uderzenie z tarciem "). Chcę tylko wymodelować kompresję, spowolnienie, dekompresję i przyspieszenie, które występują podczas zderzenia z ziemią oraz utratę energii związaną z całym procesem.
Odpowiedź
Visual Solutions (teraz Altair) tworzy oprogramowanie VisSim. Oto schemat blokowy demo, którego użyli do symulacji odbijającej się piłki:
Bloki $ 1 / s $ są blokami integratora z biblioteki VisSim.
Wykres odbijającej się piłki z tymi parametrami pokazano poniżej.
Jeśli chcesz to uruchomić, wersja demonstracyjna jest dostarczana wraz z instalacją i możesz pobrać bezpłatną 60-dniową wersję próbną tutaj