Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Kolizja okręgu z prostokątem

Ostatnio zmodyfikowano 2009-06-25 19:28
Autor Wiadomość
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

C/C++
bool kolizja( int x1, int y1, int w1, int s1, int x2, int y2, int w2, int s2 ) // 1 to zderzajacy a 2 to zderzony
{
    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 ?
P-8034
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.
P-8035
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 ;/
P-8037
« 1 »
  Strona 1 z 1