[Allegro] Kolizja okręgu z prostokątem
Ostatnio zmodyfikowano 2009-06-25 19:28
Tombol Temat założony przez niniejszego użytkownika |
[Allegro] Kolizja okręgu z prostokątem » 2009-06-25 14:27:03 Mam problem z którym męczę się z nim dobre kilka tygodni Otóż chodzi o kolizje a mianowicie kolizje kulki z prostokątem Szukałem z necie znalazłem masę tematów na forach próbowałem wielu sposobów i zawsze coś było źle Ostatnia kolizja jaką próbowałem była jakaś tam kolizja ale coś było z nią nie tak już nie pamiętam czemu ale wiem że napisałem swoją wersję tego od nowa Teraz wygląda to tak bool kolizja( int x1, int y1, int w1, int s1, int x2, int y2, int w2, int s2 ) { if( x1 < x2 + s2 && x1 > x2 && y1 > x2 && y1 < x2 + w2 ) return true; if( x1 < x2 + s2 && x1 > x2 && y1 + w1 > y2 && y1 + w1 < y2 + w2 ) return true; if( x1 + s1 > x2 && x1 + s1 < x2 + s2 && y1 > y2 && y1 < y2 + w2 ) return true; if( x1 + s1 > x2 && x1 + s1 < x2 + s2 && y1 + w1 > y2 && y1 + w1 < y2 + w2 ) return true; else return false; } I z tym jest tak że jak robię test "na sucho" czyli nowy projekt jakieś tam 2 prostokąty i ta kolizja ,to wszystko działa dobrze ale podczas gry kiedy piłka leci i uderza w miejsce w którym stoją obok siebie 2 prostokąty to piłka wpada miedzy nie coś dziwnego porobi i wyleci gdzieś tam dalej, próbowałem przesuwać te prostokąty tak żeby trochę wchodziły na siebie ale to i tak nic nie dawało Więc po tej długiej wypowiedzi Zna ktoś dobra kolizję która zawsze działa i jest niezawodna ? |
|
DejaVu |
» 2009-06-25 14:36:22 To co masz tu napisane to algorytm kolizji dwóch prostokątów. Nie wiem nawet czy działa. Generalnie wszystkim osobom, które mają problemy z kolizjami podaję linka http://archiwum.ddt.pl/?TextId=1660. Zawiera on przetestowaną wersję algorytmu wykrywającego kolizje między dwoma prostokątami. Co do kolizji okręgu z prostokątem to powinieneś wyznaczyć: 1) minimalną odległość między środkiem okręgu, a najbliżej położonym punktem prostokąta. 2) sprawdzasz później warunek czy (odległość<=r_okręgu). Jeśli warunek jest prawdziwy to zachodzi kolizja. /edit: Największym problemem jest oczywiście wyznaczenie najbliżej położonego punktu prostokąta względem okręgu. Jest to jednak raczej zadanie bliższe czystej matematyce niż informatyce i programowaniu. Generalnie bierzesz kartkę, rysujesz rysunek pomocniczy i wyznaczasz wzór ogólny, który później wklepujesz w program. |
|
Tombol Temat założony przez niniejszego użytkownika |
» 2009-06-25 19:28:10 Wyznaczenie odległości to nie problem ale mam problem z tym ze nie wiem gdzie powinienem dać punkt zaczepienia tego wektora ;/
Bo na idealnym środku prostokąta tego nie zrobię bo to nie jest koło to w różnych miejscach różne odległości dobre dla kolizji są ;/
I teraz nie wiem gdzie i jak zrobić ten pkt zaczepienia wektora ;/ |
|
« 1 » |