Я читал о пересечении прямоугольников на:
Алгоритм обнаружения пересечения двух прямоугольников?
Но у меня проблемы с его реализацией.
Если R1 (A, B, C, D) - мой повернутый прямоугольник, а R2 (A ', B', C ', D') - другой прямоугольник без вращения.
Формула, извлеченная из ссылки выше:
edge = v(n) - v(n-1)
Вы можете получить перпендикуляр к этому, повернув его на 90 °. В 2D это просто как:
rotated.x = -unrotated.y
rotated.y = unrotated.x
// rotated: your rotated edge
// v(n-1) any point from the edge.
// testpoint: the point you want to find out which side it's on.
side = sign (rotated.x * (testpoint.x - v(n-1).x) +
rotated.y * (testpoint.y - v(n-1).y);
Мои повернутые края будут из R1 с
AB (xB-xA, yB-yA), поэтому повернутый x является xB-xA?
BC (xC-xB, yC-y1)
CD ...
AD ...
Контрольной точкой будет A ', B', C ', D' от R2
Поэтому я должен проверить знак результата со всех точек R2 на 4 ребра из R1.
Это 16 сравнений, если они пересекаются. Как я узнаю, что нашел разделительный край?
Спасибо