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


У меня есть два прямоугольника, один движется, а другой неподвижен. У меня есть размер обоих прямоугольников и текущие координаты движущегося прямоугольника и координаты того, куда он хочет пойти. Он будет двигаться по прямой линии. С помощью этой информации, что является наиболее эффективным способом, чтобы найти, если два ящика столкнутся на пути. Является ли это более эффективным, чтобы сделать это или переместить коробку небольшое количество каждый кадр и сделать обнаружение столкновения каждый раз?

2 2

2 ответа:

Поскольку один из прямоугольников неподвижен, один из способов сделать это-создать многоугольник пути, пройденного движущимся прямоугольником, что можно сделать, используя только его начальное и конечное положения:

(initial position)
+--------+
|\       |\
| \      | \
+--\-----+  \
 \  \     \  \
  \  +-----\--+
   \ |      \ |
    \|       \|
     +--------+
      (final position)

Полигон пути:

+--------+
|         \
|          \
+           \
 \           \
  \           +
   \          |
    \         |
     +--------+
Затем используйте обычный алгоритм обнаружения столкновения полигонов между неподвижным прямоугольником и полигоном пути.

Если он движется с постоянной скоростью, наиболее эффективный способ-вычислить, когда они столкнутся (время = скорость/расстояние) и если они столкнутся (выведите линейное уравнение движения и посмотрите, пройдет ли он через неподвижный прямоугольник). Если он движется с переменной скоростью, выполняйте эти вычисления каждый раз, когда скорость меняется. Они оба гораздо эффективнее, чем сравнение для каждого кадра.