Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zderzanie się obiektów w 2D
Forum PHP.pl > Inne > Hydepark
sweter
Witam,
chciałem napisać aplikację, która będzie symulowała zachowanie się różnych obiektów (prostokątów, kwadratów, kół) podczas zderzania. Miała by działać ona w następujący sposób: domyślnie w oknie będzie ustawionych kilka prostokątnych klocków. User będzie miał możliwość wystrzelenia w dowolnym kierunku piłki. Przy zderzeniu się piłki z klockiem lub klocka z klockiem ma dojść do interakcji pomiędzy przedmiotami.
Nad częścią fizyczną sobie poradzę, ale zupełnie nie mam pojęcia jak sprawdzić, czy obiekty stykają/zderzają się.
Jak rozwiązać to algorytmicznie?
Pozdrawiam smile.gif
Crozin
Naprawdę jest tego sporo w sieci, więc wróć z czymś konkretnym.
http://www.google.com/search?hl=en&saf...ons&spell=1
hwao
Czy się stykają sprawdzasz zależnie od figury:
- okrąg - okrąg - sprawdzasz czy odległość między środkami okręgów jest mniejsza lub równa od r1+r2
Figury wielokątne budujesz z odcinków:
- okrąg - odcinek - sprawdzasz odległość punktu od odcinka (jeżeli mniej mniej lub równe "r" to boom)
- odcinek - odcinek - robisz warunek na przecinanie się odcinków i sprawdzasz czy któryś się nie przecina.
KeeL
Dokładnie tak jak napisał @hwao
Przykładowa klasa detekcji kolizji Tutaj masz w SFML, ale na jej podstawie powinieneś wiedzieć już co i jak.
KKH
Cytat(sweter @ 9.02.2011, 19:06:39 ) *
zupełnie nie mam pojęcia jak sprawdzić, czy obiekty stykają/zderzają się.
Jak rozwiązać to algorytmicznie?
Pozdrawiam smile.gif


A umiesz rozwiązać zadania typu:
Oceń czy dane 2 punkty leża po tej samej stronie prostej danej równaniem parametrycznym.
Jaka jest odległość między 2 punktami
Obliczyć część wspólną dwóch odcinków leżacych na jednej prostej
Obliczyć odległość punktu od prostej

?

To są przeważnie krótkie wzorki. Tutaj kryje się know-how i z tego sobie wyprowadzisz algorytmy stwierdzania przecieć bardziej złożnych obiektów. Poza tym kolizje prostokątów radykalnie się upraszają gdy założysz ich prostpadłość. Wtedy przecinać się muszą ich rzuty na osie układu.

Ja sobie kiedyś pisałem taki engine. Obiekt poruszał się z pewnym skokiem zależnym od liczby klatek na sekundę i szybkości obiektu. Jeśli w następnym ruchu dochodziło do kolizji, to długość "skoku" była przycinana do krawędzi kolegi wywołującego kolizję ,odpalało się odpowiednie wydarzenie (niszczenie, zmiana "pędu") itp. a koledze w danej iteracji już skoku nie liczono.

Poprawniej byłoby zapewne całkować równania ruchu i rzucać co jakiś czas do renderera, ale to już jest większe pr0 wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.