У меня дороги хранятся в виде массива прямоугольников, Как обнаружить столкновение между автомобилем и дорогами

Дороги не имеют никакого превышения, координата y равна 0. Автомобиль — 3d, но для обнаружения столкновений он может быть взят как 2-ый прямоугольник.

Моя структура:

struct rectangle
{
// 4 coordinates of the rectangle
float x1_left, y1_left;
float x1_right, y1_right;

float x2_left, y2_left;
float x2_right, y2_right;

double thetaSlope;
};

У меня есть массив всех этих прямоугольников, которые составляют дорогу, изначально машина находится внутри первого прямоугольника.

Я искал обнаружение столкновений и обнаружил — простое двумерное обнаружение столкновений между двумя прямоугольниками, но
Как определить, лежит ли моя машина в определенном прямоугольнике, машина также должна легко перемещаться из одного прямоугольника в другой, но не выходить из сторон прямоугольника.

Я ищу довольно простое решение.Вид сверху на дороги

0

Решение

Создайте класс Point2d и определите прямоугольник как контейнер точек. Например:

    struct rectangle
{
Point2d p1;
Point2d p2;
Point2d p3;
Point2d p4;

double thetaSlope;
};

или же

    struct rectangle
{
Point2d points[4];

double thetaSlope;
};

С этим кодом абстракции проще.

Вы должны пометить стороны прямоугольников как проницаемые или непроницаемые. В обнаружении столкновений участвуют только непроницаемые стороны.

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

0

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

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

По вопросам рекламы [email protected]