Autor Wątek: odbicie od płaszczyzny- konserwacja energi  (Przeczytany 3224 razy)

Offline dread

  • Użytkownik

# Wrzesień 05, 2007, 15:26:20
Witam,

Od niedawna zainteresowałem się symulacjami fizyki do gier. Napisałem prosty mechanizm całkujący równania ruchu na podstawie działających sił. Mam jednak pewien problem. Po przyłożeniu do obiektu stałej siły G = mg obiekt bardzo ładnie spada z pewnej wysokości h. Odbicie od płaszczyzny zamodelowałem za pomocą prawa Hook'a ( F = -kx), gdzie x w moim przypadku to stopień penetracji płaszczyzny. Niestety obiekt przy odbiciu nie traci energii i wznosi się na początkową wysokość. Przy zbyt małym parametrze k następuje efekt odbicia od trampoliny ( widoczna penetracja płaszyzny). Przy zbyt dużym parametrze k obiekt odlatuje w kosmos. Siła odbicia zaczyna działać po przekroczeniu przez obiekt współrzędnej y = 0. Jak można rozwiązać ten problem? Czy podejście z wykorzystaniem siły sprężystej ma sens?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline szalony_zlomiarz

  • Użytkownik

# Wrzesień 05, 2007, 15:34:47
Jeśli chcesz, zeby obiekt tracił energię musisz dodać jakieś tarcie.

Offline smirnof'

  • Użytkownik

# Wrzesień 05, 2007, 15:46:48
Witam,
Prawo Hook'a tyczy sie ciał sprężystych, podejrzewam iż tobie chodzi o dobicie sie obiektu od ciala "sztywnego" sugeruje tutaj przyjrzenie sie 3 zasadzie dynamiki Newtona i zderzeniom, co z kloeji sprowadza sie w zasadzie do zasady zachowania pedu.
Czy podejście z wykorzystaniem siły sprężystej ma sens?
Nie ma sesnu stosować go w miejscu gdzie nie wchodza w gre ciala spręzyste.

Offline Xion

  • Redaktor
    • xion.log

# Wrzesień 05, 2007, 15:57:02
Trzecia zasada dynamiki przyda się niezależnie od tego, czy płaszczyzna ma być sprężysta czy nie. W momencie odbicia piłka działa na płaszczyznę pewną siłą i jednocześnie płaszczyzną działa na piłkę siła od przeciwnym zwrocie. Dlatego piłka odbija się i wzlatuje ponownie na podobną wysokość. Jednak tylko 'podobną', bo cały czas działa na nią siła grawitacji, która odejmuje się od przyspieszenia piłki, aż ta w końcu (z pominięciem stabilności numerycznej) zatrzyma się na powierzchni ziemi.

Technicznie odbicie od płaszczyzny to tylko przesunięcie odbijanego obiektu poza strefę penetracji i skorzystanie z prawa odbicia wektorów do wyznaczenia nowego wektora przyspieszenia (jeżeli piłka spada pionowo, czyli kierunki przyspieszenia i normalnej płaszczyzny pokrywają się, to oczywiście będzie tylko nowe_a = -stare_a). Jeżeli w grę wchodzą dodatkowe siły, to zgodnie 2 zasadą dynamiki dzielimy je przez masę i piłki i dodajemy (jak np. sprężystość trampoliny) lub odejmujemy (jak tarcie).

Offline dread

  • Użytkownik

# Wrzesień 05, 2007, 16:35:54
Szalony_zlomiarz: Zmieniłem wzór siły na F = -kx - bv, gdzie v to prędkość ciała. Obiekt wytraca energię ale wygląda na to, że jest to bardzo niestabilne - w momencie, gdy obiekt już powinien stać to zaczyna się coraz wyżej odbijać. Zmniejszenie kroku całkowania nie pomaga za bardzo. Najprawdopodobniej dobór współczynników k i b taki, żeby to działało jest możliwy ale nie ma sensu ręczna manipulacja.

smirnof, Xion: Rozumiem wasze podejście. Męczę się z tą siłą dlatego, że jest to najbardziej "fizyczne" rozwiązanie - chodzi mi o to, że wektor przyspieszenia nie zmienia się ot tak sobie. Jak wiemy:
   dp/dt = F =>
   d(mv)/dt = F => 
   m*dv/dt = F =>
   F = ma
Przy odbiciu następuje zmiana wektora siły wypadkowej:
   dF/dt = m*da/dt
Jednak w przypadku realnego świata dt jest nieskończenie małe więc występuje coś takiego jak impuls siły (nie znam się za  bardzo na tym ale to logiczne:). W symulacji jednak występuje krok całkowania i nawet jeśli przyłoży się siłę przeciwną o tej samej wartości z jaką ciało uderzyło w powierzchnię, to minie pewien czas zanim ta siła "wyhamuje" ciało, które posiadało pewien pęd.

Generalnie to tylko takie moje rozważania. Najprostszą metodą wydaje się zmiana wektora pędu (nie przyspieszenia), jednak jak na moje oko to jest mało fizyczne:P Jeśli macie jakieś pomysły albo napisałem jakieś bzdury to zapraszam do dyskusji.

Offline taki_tam

  • Użytkownik

# Wrzesień 05, 2007, 16:47:21
Zapraszam tu: http://www.unit1.pl/331,txt
Art Spider'a wiec dobry ;)

Pozdrawiam! ;) kompustelnik taki_tam

Offline szalony_zlomiarz

  • Użytkownik

# Wrzesień 05, 2007, 17:09:40
Rozumiem, że F = -kx obliczasz tylko przy odbijaniu się piłeczki, czyli wtedy gdy ma kontakt z podłożem. Natomiast tarcie powinno działać przez cały czas, również wtedy gdy piłeczka porusza sie w powietrzu, no chyba, że zakładasz, że wszystko dzieje się w próżni, tylko wtedy piłeczka powinna bardzo wolno wytracać energię, bo pozostaje tylko tarcie z podłożem, które jest w ogólnym wypadku bardzo małe.

Offline zephyr

  • Użytkownik

# Wrzesień 05, 2007, 17:23:32
Może na fizyce w grach się nie znam, ale na lekcjach fizyki nie spałem.

Cytuj
Trzecia zasada dynamiki przyda się niezależnie od tego, czy płaszczyzna ma być sprężysta czy nie. W momencie odbicia piłka działa na płaszczyznę pewną siłą i jednocześnie płaszczyzną działa na piłkę siła od przeciwnym zwrocie. Dlatego piłka odbija się i wzlatuje ponownie na podobną wysokość. Jednak tylko 'podobną', bo cały czas działa na nią siła grawitacji, która odejmuje się od przyspieszenia piłki, aż ta w końcu (z pominięciem stabilności numerycznej) zatrzyma się na powierzchni ziemi.
Pole grawitacyjne jest polem zachowawczym, pomijając stabilność numeryczną, dopóki nie wprowadzisz jakiegoś "ujścia energii" piłka będzie się odbijać w nieskończoność na tą samą wysokość.

Cytuj
Jednak w przypadku realnego świata dt jest nieskończenie małe więc występuje coś takiego jak impuls siły (nie znam się za  bardzo na tym ale to logiczne:). W symulacji jednak występuje krok całkowania i nawet jeśli przyłoży się siłę przeciwną o tej samej wartości z jaką ciało uderzyło w powierzchnię, to minie pewien czas zanim ta siła "wyhamuje" ciało, które posiadało pewien pęd.
To jest bez sensu.
W rzeczywistości jest raczej jak w twojej symulacji, ciało sztywne posiada duże k, więc nie widać jak się ugina ponieważ są to małe czasy i małe ugięcia.
Z tym że rzeczywistość "całkuje z nieskończenie małym dt" :)
U ciebie ciało wbija się na głębokość na którą dostać się nie powinno [masz za duże dt] i dostaje siłą którą dostac nie powinno, dlatego wylatuje w kosmos.
W symulacji lepiej przy ciałach wystarczająco sztywnych skorzystać z opisu dla idealnie sztywnych ciał. Nie będzie problemów z całkowaniem.

Nie widziałem w LO wzorów na tarcie prostopadłe do płaszczyzny zderzenia. Ale widziałem banalne podejście "dla gier" - mnożę "odbitą prędkość" przez jakąś stałą z zakresu (0,1).
Dzięki temu zyskujesz straty energii i piłka nie odbija się w nieskończoność.
« Ostatnia zmiana: Wrzesień 05, 2007, 17:27:23 wysłana przez zephyr »

gskupien

  • Gość
# Wrzesień 05, 2007, 18:08:13
Może na fizyce w grach się nie znam, ale na lekcjach fizyki nie spałem.

Cytuj
Trzecia zasada dynamiki przyda się niezależnie od tego, czy płaszczyzna ma być sprężysta czy nie. W momencie odbicia piłka działa na płaszczyznę pewną siłą i jednocześnie płaszczyzną działa na piłkę siła od przeciwnym zwrocie. Dlatego piłka odbija się i wzlatuje ponownie na podobną wysokość. Jednak tylko 'podobną', bo cały czas działa na nią siła grawitacji, która odejmuje się od przyspieszenia piłki, aż ta w końcu (z pominięciem stabilności numerycznej) zatrzyma się na powierzchni ziemi.
Pole grawitacyjne jest polem zachowawczym, pomijając stabilność numeryczną, dopóki nie wprowadzisz jakiegoś "ujścia energii" piłka będzie się odbijać w nieskończoność na tą samą wysokość.
mylisz się... od "dopóki...". Podczas wzlatywania w powietrze po odbiciu, ciągle działa na nią siła grawitacyjna. Piłka traci na pędzie (tak bardziej "naukowo" - ma ujemne przyśpieszenie) lecąc w górę... zyskuje na przyśpieszeniu spadając. Te siły nie są równoważne, tylko się sumują, na ciagłe przesunięcie w kierunku źródła grawitacji.
« Ostatnia zmiana: Wrzesień 05, 2007, 18:20:05 wysłana przez RageX »

Offline szalony_zlomiarz

  • Użytkownik

# Wrzesień 05, 2007, 18:39:57
A słyszałeś o zasadzie zachowania energii?
Dopóki zderzenia będą idealnie sprężyste i nie bedzie żadnego tarcia w trakcie ruchu to piłeczka będzie się ciągle odbijała na taką samą wysokość. Zresztą to samo wyjdzie z zasady zachownia pędu tylko bedzie wiecej obliczeń.
Cytuj
Te siły nie są równoważne, tylko się sumują, na ciagłe przesunięcie w kierunku źródła grawitacji.
A w tym zdaniu to już całkiem nie wiem o co chodzi ;p

gskupien

  • Gość
# Wrzesień 05, 2007, 19:15:13
Przy zalozeniu, ze jest to odbicie pod katem prostym do tej plaszczyzny, przemnoz wektor predkosci obiektu przez stala z przedzialu (-1.0, 0.0), dostaniesz odbicie niesprezyste (brak zasady zachowania energii mechanicznej). Dzieki temu wartosc predkosci bedzie mniejsza niz przed odbiciem i kulka poleci troche nizej niz byloby to przy odbiciu sprezystym. Dorzuc tez if'a, ktory wyzeruje calkiem predkosc gdy ta bedzie juz bardzo mala, zeby zatrzymac kulke na plaszczyznie.

gskupien

  • Gość
# Wrzesień 05, 2007, 19:32:12
Luz... pamięć płata figle, sorki.
Chodziło o prawa dynamiki newtona, ale jest to niepoprawne, oczywiście.

Offline Liosan

  • Redaktor

# Wrzesień 06, 2007, 10:17:54
Jednak w przypadku realnego świata dt jest nieskończenie małe więc występuje coś takiego jak impuls siły (nie znam się za  bardzo na tym ale to logiczne:).

Pojęcie "impuls siły" powstało w głębokim średniowieczu jako prototyp pędu mniej więcej wtedy co pojęcie "fluid cieplny" jako prototyp termodynamiki. A teoria "fluidu" przetrwała paręset lat dłużej :P więc to jest naprawdę bezsensowny concept :) (co prawdai na podstawie fluidu cieplnego można zbudować baterię słoneczną... :])

Ale wracając do tematu: zderzenia w szkolnej fizyce są natychmiastowe, natomiast w świecie realnym oczywiście nie. Czy pojęcie czasu trwania zderzenia ma jakieś przełożenie na programowanie fizyki gry, czy to overkill? Czy można na tej podstawie wyliczyć energię utraconą w czasie zderzenia? Pytam ogólnie, nie tylko w przypadku piłeczki odbijającej się od podłoża - statki kosmiczne, poduszkowce, whatever.

Liosan

gskupien

  • Gość
# Wrzesień 06, 2007, 11:26:14
Liosan, zwykly bilans energetyczny: wystarczy policzyc energie kinetyczna przed zderzeniem i po, roznica tych dwoch da ilosc energii, ktora poszla na "cos innego", np. wydzielenie sie ciepla itp.

EDIT: Lio, tzn. nie wiem o co dokladnie chodzi, ale swiat gry jest deterministyczny, tworzony przez programiste, a to oznacza, ze my ustalamy reguly. Wiekszosc gier wzoruje sie na mechanice newtonowskiej by uzyskac wrazenie jak najblizsze rzeczywistemu ale i tak robi sie wiele uproszczen wynikajacych z ograniczenia mocy obliczeniowej. Modele fizyczne w grach sa pewna aproksymacja mechaniki klasycznej, ktora notabene tez jest tylko pewna aproksymacja swiata rzeczywistego. :) Sam ustalasz jakie beda straty energii przy zderzeniu. Jezeli chodzi o ten czas trwania zderzenia to jezeli pilka robi jakies wgniecenie to wystarczy walnac odpowiednia teksture dla wizualnego efektu. Czas takiego zdarzenia jest bardzo maly i nie oplaca sie robic jakis skomplikowanych obliczen bo to nie ma sensu, wystarczy zwykle odjecie ustalonej przez nas ilosci energii, ktore sobie uzalezniamy od np. predkosci ciala tuz przed zderzeniem. Jezeli chodzi o kolizje bardziej zlozonych obiektow, to przy realistycznych symulacjach dochodzi model zniszczen, jakies odpadajace czesci etc. i to jest napewno bardziej skomplikowane ale nie wiem jak sie to w praktyce rozwiazuje. Stopien skomplikowania modelu rosnie wraz ze wzrostem "realizmu". :)
« Ostatnia zmiana: Wrzesień 06, 2007, 15:04:28 wysłana przez prophet »

Offline Liosan

  • Redaktor

# Wrzesień 06, 2007, 12:35:59
Ale ja pytam w drugą stronę: czy można jakoś oszacować, ile energii powinno się rozproszyć, na podstawie danych w świecie gry?

Liosan