В общем, необходимо выполнить шаги, описанные в Вопросе, чтобы определить, сталкиваются ли прямоугольники (пересекаются), отмечая, что, как это делает OP, мы можем сломаться (с выводом о пересечении), как тольконайдена разделяющая ось.
Существует несколько простых способов «оптимизации» в смысле обеспечения шансов для более ранних выходов.Их практическая ценность зависит от распределения прямоугольников, которые проверяются, но оба легко включаются в существующую структуру.
(1) Проверка ограничивающего круга
Один быстрый способ доказать отсутствие пересеченияЭто показывает, что ограничивающие круги двух прямоугольников не пересекаются.Ограничительный круг прямоугольника имеет общий центр, середину любой диагонали и имеет диаметр, равный длине любой диагонали.Если расстояние между двумя центрами превышает сумму радиусов двух окружностей, то окружности не пересекаются.Таким образом, прямоугольники также не могут пересекаться.Если цель состояла в том, чтобы найти ось разделения, мы еще не достигли этого.Однако, если мы хотим знать только, сталкиваются ли прямоугольники, это позволяет ранний выход.
(2) Вершина одного прямоугольника внутри другого
Проекция вершины одного прямоугольникана осях, параллельных краям другого прямоугольника, предоставляет достаточно информации, чтобы определить, находится ли эта вершина внутри другого прямоугольника.Эта проверка особенно проста, когда последний прямоугольник был переведен и не повернут в начало координат (ребра параллельны обычным осям).Если случается, что вершина одного прямоугольника находится внутри другого, то прямоугольники, очевидно, пересекаются.Конечно, это достаточное условие для пересечения, а не необходимое.Но он допускает ранний выход с заключением пересечения (и, конечно, без нахождения оси разделения, потому что ни один не будет существовать).