Дороги не имеют никакого превышения, координата 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;
};
У меня есть массив всех этих прямоугольников, которые составляют дорогу, изначально машина находится внутри первого прямоугольника.
Я искал обнаружение столкновений и обнаружил — простое двумерное обнаружение столкновений между двумя прямоугольниками, но
Как определить, лежит ли моя машина в определенном прямоугольнике, машина также должна легко перемещаться из одного прямоугольника в другой, но не выходить из сторон прямоугольника.
Я ищу довольно простое решение.
Создайте класс Point2d и определите прямоугольник как контейнер точек. Например:
struct rectangle
{
Point2d p1;
Point2d p2;
Point2d p3;
Point2d p4;
double thetaSlope;
};
или же
struct rectangle
{
Point2d points[4];
double thetaSlope;
};
С этим кодом абстракции проще.
Вы должны пометить стороны прямоугольников как проницаемые или непроницаемые. В обнаружении столкновений участвуют только непроницаемые стороны.
Я думаю, что использование полигонов вместо прямоугольников является более простым решением. Вы можете определить всю карту как один большой многоугольник и не рассматривать движение от одного прямоугольника к другому.
Других решений пока нет …