логический поток обнаружения столкновения прямоугольника с N-прямоугольниками

Мне действительно трудно понять ошибку в моей программе.

Мой код работает только в 2 прямоугольники, но если я увеличу число прямоугольников, это не сработает вообще.

Моя программа выглядит так:

pseudo code

for (i = 0 to N_of_rectangles - 1)
{

Rectangle& r1 = rect[i];

if (r1.is_grab_by_mouse())
{
for (j = 0 to N_of_rectanges - 1)
{
if (i == j)
{
skip_this_loop    //skip for any self-checking
}

Rectangle& r2 = rect[j];

if (not Rectangle.collide(r1, r2))
{

if (r1.restricken_move()) break;    //restricken move will be true if
//*this rect will collide to !*this
if (r1.movement == HORIZONTAL)
r1.move_x_along_with_mouse()
else    //VERTICAL
r1.move_y_along_with_mouse()
}
else
{
r1.resolve_collision()
}
}
}
}

Я попробовал все алгоритмы для обнаружения столкновений прямоугольников, которые я искал в Google и мой, но кажется, что у меня есть logic flaw Вот.

(PS. Мое обнаружение повторного столкновения не для повернутых прямоугольников)

0

Решение

Почему у вас там 2 петли?
В любом случае, я думаю, что вы должны двигать r1, только если он не сталкивается вообще, не каждый раз, когда он не сталкивается с прямоугольником.
Код должен быть таким:

boolean collision=false
for (j to N_of_rectanges)
{
if (i == j)
{
skip_this_loop
}

if (Rectangle.collide(r1, r2))
{
r1.resolve_collision()
collision=true
}
}
if(not collision){
r1.move()
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector