Попал ли курсор в хитбокс

тема: Геометрия (формулы) · уровень: базовый

Условие

В платформере у каждого объекта есть «хитбокс» — прямоугольник со сторонами, параллельными осям. Игрок кликает мышкой, и игра должна быстро понять: попал ли курсор внутрь хитбокса (граница тоже считается попаданием).

Прямоугольник задан координатами двух противоположных вершин. Они могут быть введены в любом порядке.

Важно: в олимпиадных задачах координаты иногда не помещаются в 32-битный тип, поэтому считайте, что числа надо обрабатывать как 64-битные целые (в Python это не проблема).

Формат ввода

В первой строке записаны четыре целых числа x1 y1 x2 y2 — координаты двух противоположных вершин прямоугольника. Во второй строке записаны два целых числа x y — координаты клика.

Формат вывода

Выведите YES, если точка (x, y) лежит внутри прямоугольника или на его границе. Иначе выведите NO.

Ограничения

Пример

Ввод:

0 0 10 5
3 5

Вывод:

YES

Как решать — идея подхода

Приём: Нормализация границ (min/max) + проверка диапазонов

Ключевое наблюдение: вершины прямоугольника могут прийти в любом порядке, поэтому сначала надо «упорядочить» его границы. Так как стороны параллельны осям, попадание точки проверяется независимо по x и по y: точка внутри тогда и только тогда, когда её x между левым и правым краем, а y — между нижним и верхним (границы включаются).

Почему это работает: осевой прямоугольник — это просто декартово произведение двух отрезков: [left, right] по x и [bottom, top] по y. Даже если прямоугольник вырожден (в отрезок или точку), проверка отрезков остаётся корректной.

План:

Сложность: O(1) по времени и O(1) по памяти.

Частая ошибка: использовать строгие неравенства (< вместо <=) и случайно считать клики на границе «мимо».

Разберись руками

Есть прямоугольный хитбокс с вершинами (0,0) и (10,5). Клик сделали в точке (3,5). Нужно понять: точка внутри или на границе.

Идея: Сначала для прямоугольника находишь «левую/правую» границы по x и «нижнюю/верхнюю» по y (даже если вершины даны в любом порядке). Потом отдельно проверяешь, что x точки лежит между границами по x, и y точки — между границами по y. Если оба условия верны, значит точка внутри или на границе.

Решить задачу с автопроверкой на Python →

Куда дальше