Autor Wątek: Collisions resolution -punkt pierwszego kontaktu  (Przeczytany 1736 razy)

Offline _jUNIOR.

  • Użytkownik

# Listopad 23, 2009, 16:30:55
Witam,
Siedze wlasnie troche w fizyce (konkretnie kolizjach) mojej gierki i mam problem z rozwizaywaniem kolizji.
Wykrywanie kolizji działa, wyliczam sobie wszystko co potrzebuje do jej rozwiazania: contact normal, contact point, penetration.
Tylko jak teraz przy pomocy tych danych wyliczyc punkt pierwszego kontaktu? Tak zebym mogl cofnac sfery i zeby nie kolidowaly juz z soba.
http://img264.imageshack.us/img264/3395/spheres.jpg

Offline Mr. Spam

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

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 23, 2009, 16:43:43
Cytuj
Tylko jak teraz przy pomocy tych danych wyliczyc punkt pierwszego kontaktu?
Przy pomocy samych tych danych (punkt, normalna, penetracja) to się nie da. Ja tam to po prostu olewam i odsuwam od siebie sfery na odległość "suma promieni + epsilon". :)

Offline Kos

  • Użytkownik
    • kos.gd

# Listopad 23, 2009, 17:02:30
A możesz wyliczyć dokładny czas kolizji? Jeśli mamy to, to sprawa prosta.

Offline _jUNIOR.

  • Użytkownik

# Listopad 23, 2009, 17:11:16
Przy pomocy samych tych danych (punkt, normalna, penetracja) to się nie da
Jakie dane jeszcze potrzebuje?

Ja tam to po prostu olewam i odsuwam od siebie sfery na odległość "suma promieni + epsilon". :)
No to jest zdecydowanie najwydajnieszy sposób :D chyba przydało by się jeszcze uwzględnić jakoś proporcje prędkości zbliżania się do siebie... Jeżeli jedna sfera była by bardzo powolna a druga mega szybka to dziwnie by to wyglądało jeżeli bym je odsuną na równe odległości od siebie.

Próbowałem wyliczyć czas, ale jedyny sposób na jaki wpadłem to sprawdzanie odległości przy pomocy bisekcji wektora ostatniego przesunięcia obiektów, a to chyba jest mało wydajne.
« Ostatnia zmiana: Listopad 23, 2009, 17:13:07 wysłana przez _jUNIOR. »

bs.mechanik

  • Gość
# Listopad 23, 2009, 17:30:04
A nie prosciej uzyc box2d ? Nie jest to moze jakies cudo, ale kolizje dzialaja bardzo dobrze ;)

Offline Kuba D.

  • Użytkownik

# Listopad 23, 2009, 17:31:15
A nie prosciej uzyc box2d ? Nie jest to moze jakies cudo, ale kolizje dzialaja bardzo dobrze ;)
A nie lepiej już użyć PhysX-a jeśli już się bawimy w gotowe silniki ?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 23, 2009, 17:33:35
Cytuj
Jakie dane jeszcze potrzebuje?
Prędkości, położenia względnego i pewności, że obiekty faktycznie są sferami, czyli po prostu zrobić CCD i uniknąć błędu, zamiast próbować poprawić go po fakcie.

Masz dwie sfery, o położeniach poczatkowych s1 i s2 oraz promieniach r1 i r2, które lecą z prędkościami v1 i v2.
Chcesz znaleźć czas zderzenia, czyli czas, w którym środki tych sfer znajdą się w odległości r1+r2 od siebie.
Do ozwiązania problemu potrzebna jest znajomość:
- wzoru na ruch jednostajny,
- twierdzenia Pitagorasa,
- wzoru na rozwiązania równania kwadratowego

Czyli wymagania na poziomie 8. klasy podstawówki. ;)


Cytuj
No to jest zdecydowanie najwydajnieszy sposób  chyba przydało by się jeszcze uwzględnić jakoś proporcje prędkości zbliżania się do siebie... Jeżeli jedna sfera była by bardzo powolna a druga mega szybka to dziwnie by to wyglądało jeżeli bym je odsuną na równe odległości od siebie.
E tam. Jeżeli tak by się działo, to znaczy że masz za duży krok symulacji. :)

bs.mechanik

  • Gość
# Listopad 23, 2009, 17:39:02
A nie prosciej uzyc box2d ? Nie jest to moze jakies cudo, ale kolizje dzialaja bardzo dobrze ;)
A nie lepiej już użyć PhysX-a jeśli już się bawimy w gotowe silniki ?

Zmylil mnie rysunek a nie doczytalem posta. Myslalem ze chodzi o 2d ;)

Offline Kuba D.

  • Użytkownik

# Listopad 23, 2009, 17:45:36
Czyli wymagania na poziomie 8. klasy podstawówki. ;)
Nie ma 8 klasy podstawówki ;) Reformy podobno jakieś były itp. Pewnie umknęło Ci co nieco...

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 23, 2009, 17:50:00
Nie ma 8 klasy podstawówki ;)
W takim razie współczuję... nie będziesz w stanie rozwiązać tego problemu. ;)

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Listopad 23, 2009, 18:34:18
Nie ma 8 klasy podstawówki ;) Reformy podobno jakieś były itp. Pewnie umknęło Ci co nieco...
No sory, ale jak ma się głowę na karku to w 1-2 gim.... (rodznik 92 przynajmniej)

Cytuj
- wzoru na ruch jednostajny,
- twierdzenia Pitagorasa,
- wzoru na rozwiązania równania kwadratowego

EEe po co? ;>

- Twierdzenia o podobieństwie trójkątów
- Rozwiązywanie układu równian linowych. // Aczkolwiek można inaczej ;-)
- Wzór na ruch jednostajny ;>
« Ostatnia zmiana: Listopad 23, 2009, 18:46:13 wysłana przez rm-f »

Offline Charibo

  • Redaktor

# Listopad 23, 2009, 20:52:10
A nie prosciej uzyc box2d ? Nie jest to moze jakies cudo, ale kolizje dzialaja bardzo dobrze ;)
A nie lepiej już użyć PhysX-a jeśli już się bawimy w gotowe silniki ?
PhysX mocno ssie w porównaniu do Box2D - a raczej użytkownik ssie, dodatkowe n megabajtów z sieci. ;)

Offline Kuba D.

  • Użytkownik

# Listopad 23, 2009, 21:05:21
PhysX mocno ssie w porównaniu do Box2D - a raczej użytkownik ssie, dodatkowe n megabajtów z sieci. ;)
No tak, te prawie 40 MB to faktycznie jest bardzo dużo. 3 dni się będzie ściągać... ;)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 23, 2009, 23:54:28
Cytuj
EEe po co? ;>
Pokaż mi analityczne rozwiązanie problemu znalezienia czasu pierwszej kolizji dwóch poruszających się kul bez rozwiązania równania kwadratowego po drodze. ;)