Я хочу определить, перекрываются ли два прямоугольника (не пересекаются). Я знаю, как это сделать для прямоугольников, выровненных по оси, но в этом случае у меня есть один прямоугольник, который не всегда выровнен по оси (иначе говоря, повернут в центре). В этом сообщении показано, как для вычисления двух пересекающихся прямоугольников, но он не классифицирует один прямоугольник внутри другого, как показано на этом рисунке потому что они перекрываются, а не пересекаются.
В моем случае один из прямоугольников выровнен по оси (черный прямоугольник), а другой вращается (красный прямоугольник), что может упростить задачу.
Думаю, мне понадобится несколько дел, чтобы определить, пересекаются ли они. Первый простой случай - проверить, не находится ли какая-либо из красных вершин внутри черного ящика. Затем я могу проверить, пересекаются ли какие-либо из красных / черных краев. Я не уверен, как я могу охватить случай, показанный выше, и есть ли более простой способ сделать это.
Дополнительные сведения: это для моего графического программного клиппера (в данном случае нельзя использовать аппаратное отсечение), где черный ящик - это мое окно / область просмотра, красный ящик - это «спрайт», а все, что находится за черным ящиком, обрезано / не- рендеринг Я использую ортоганальную / 2D проекцию. В конце у меня будет две функции: одна для определения того, находится ли спрайт за пределами окна / области просмотра (что я задаю в этом вопросе), а позже я создам функцию для обрезки спрайта внутри окна / область просмотра с использованием алгоритма Сазерленда – Ходжмана.
РЕДАКТИРОВАТЬ:
В этом сообщении, как правило, описывается, как выполнять SAT, но это не так. вдаваться в подробности. Как создать нормали? "Углы" - это координаты экрана или расстояние от центра фигуры? Я пробовал адаптировать их код для своих целей, но не могу понять, как выполнить тест SAT со списком вершин (экран x и y) для каждой формы / прямоугольника.