2010-01-24 12 views
15

Ok, więc mam kilka piłek:Potrzebujesz pomocy w kolizji i obrocie koła? - Fizyka gra

Ignight Balls


Co Próbuję dowiedzieć się, jak zrobić te kręgi:

  • Obrót opiera się na powierzchni ich dotykania

  • Napraw zderzenie kolizji podczas dotykania obiektów wielu.


EDIT: To, co mam na myśli obrotu

alt text

  • Ball 0 będzie obracać lewo jak to przechylony na Ball 3

  • Ball 5 będzie obracać wskazówek zegara jak to przechylony na Ball 0


Choć rozwiązania to są uniwersalne, tak dla przypomnienia Używam Javascript i SVG i wolałbym to zrobić, niż korzystać z biblioteki.

Pomoc byłaby bardzo doceniana. Dzięki! :)

+0

Nie jestem pewien, czy rozumiem co masz na myśli przez pierwszy element pocisku. Czy możesz rozwinąć? – duffymo

+1

Jeśli Ball 0 spadnie i uderzy Ball 3, obróci się przeciwnie do ruchu wskazówek zegara, myślę, że to właśnie on ma na myśli. – Harmen

+0

Tak, dokładnie, lub jeśli piłka pochyla się na innej piłce, obraca się z boku. – RadiantHex

Odpowiedz

6

Oto kilka linków myślę, że pomóc w swoim dążeniu:

Box2D

Advanced Character Physics

Javascript Ball Simulation

Box2D ma co szukasz, a jej open source I uwierzyć. Możesz pobrać pliki i zobaczyć, jak robią to, co robią, aby osiągnąć efekt.

Daj mi znać, jeśli to pomoże, próbując poprawić odpowiedzi na pytania tutaj. :)

EDIT:

Więc poszedł do przodu i że to się po prostu nieco więcej, aby dać pewien wgląd w miarę jak bym go zbliżyć. Spójrz na obrazek poniżej:

Zasadniczo, porównaj kąty na siatce, jeśli kula spada o 30 stopni w stosunku do piłki, na którą spadnie, a następnie obróć ją pozytywnie. Jeśli spadnie on o -30 stopni w stosunku do piłki, na którą spadnie, wówczas obróć piłkę negatywnie. Nie mówię, że to jest poprawne rozwiązanie, ale po prostu o tym myślę, to jest sposób w jaki podchodzę do problemu z nietoperza.

alt text http://img686.imageshack.us/img686/9256/angles.jpg

6

Z punktu widzenia fizyki to brzmi jak chcesz oszczędzać zarówno liniowe i kątowe momentum.

Jako punkt wyjścia, należy utworzyć macierze ODE, które modelują oba, a następnie wykonać pewną algebrę liniową, aby je rozwiązać. Osobiście użyłbym Numpy/Scipy (prawdopodobnie używając rzadkiej tablicy) dla tego rozwiązania. Ale istnieje wiele podejść (sympy przychodzi na myśl). Z jakich modułów chcesz korzystać?

Będziesz chciał zapoznać się z coefficient of restitution i coefficient of friction i zdecydować, czy chcesz oszczędzać energię kinetyczną. (czy chcesz/będziesz się troszczył o to, czy nadal będą się podnosić i przetaczać na zawsze?) (prawdopodobnie będziesz potrzebował także matryc energii)

Będziesz rozwiązywać te matryce co godzinę, sprawdzając warunek, że nie ma dwóch piłek centra są bliższe niż suma dwóch promieni. (..i jeśli nie, wyregulować pędu i energii handlowe stanu po kolizji)

To dopiero Barest od początków do dużego projektu.Czy mogę zapytać, dlaczego chcesz to zrobić od zera?

+0

Witam bpowah. Dzięki. Zaimplementowałem już część tego, o czym wspomniałeś. Ale utknąłem z ustalaniem współrzędnych obiektu podczas penetracji, gdy wiele objs dotyka się nawzajem. I nie mam pojęcia, jak sprawić, aby obrót objsowy "konceptualnie" się zmienił. – RadiantHex

+0

Nie jestem pewien, czy dokładnie wiem, co masz na myśli, mówiąc o "ustalaniu obj coords podczas penetracji". Czy mogę bezpiecznie założyć, że możesz rozwiązać położenie każdej kuli pod koniec taktu, zachowując przy tym zachowanie wszystkich warunków pędu? Jeśli tak, to w jaki sposób dostaniesz coś innego, niż chcesz? – Paul

+0

Prawdopodobnie oznacza, że ​​po danym czasie liczba kulek może się przenikać, a on ma ciężkie czasy, aby go rozwiązać. Nie jestem w dziedzinie fizyki/gier od jakichś dwóch lat, ale pamiętam, że jest to stosunkowo łatwe do rozwiązania przy użyciu, iirc, terminu, relaksu. Zasadniczo na końcu każdego kroku odsuwa się każdą parę od siebie i wykonuje iterację dla ustalonej liczby kroków lub do czasu, gdy interpolacje są mniejsze niż niektóre progi. Ale mogłem zapomnieć o jakimś "dziwactwie" tutaj. –