Skip to content


Detekcja kolizji box 2 box

Wygrzebałem dzisiaj gdzieś na sieci kod do wykrywania detekcji prostokąt – prostokąt. Niby nic szczególnego ale wiele osób ma z tym problemy (ja zresztą też – z reguły wychodzi mi kod dużo dłuższy niż poniższy):


int box2box(int x0,int y0,int w0,int h0,int x2,int y2,int w2,int h2)
{
int x1 = x0 + w0;
int y1 = y0 + h0;

int x3 = x2 + w2;
int y3 = y2 + h2;

return !(x1 < x2 || x3 < x0 || y1 < y2 || y3 < y0);
}

Na wyjściu otrzymacie 0 jeżeli nie zachodzi kolizja, lub !0 jeżeli zachodzi.
Pamiętajcie że nie wykryje on przypadku gdy jeden z prostokątów zawiera się w drugim, oraz gdy stykają się tylko wierzchołkami.
Co ciekawe wykrywany jest przypadek krzyża – tzn gdy prostokąty mają część wspólną, jednak wszystkie wierzchołki leżą poza drugim prostokątem, oraz gdy testujemy dwa identyczne prostokąty leżące jeden na drugim.

Aby sprawdzić czy prostokąty się zawierają dodajcie linię przed return:

if((x1<x3 && x0<x2 && y3<y1 && y0<y2 ) || (x2<x0 && x1<x3 && y2<y0 && y1<y3)) return 1;

Znacząco wydłuży to czas testowania (zamiast 4 sprawdzeń będzie 12), ale w dzisiejszych czasach… luzik.

Posted in Gry, TechBlog.


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Siegfried says

    Hmm… ciekawe czy ten nowy plugin dziala??

  2. Siegfried says

    No chyba dziala :D



Some HTML is OK

or, reply to this post via trackback.