Пусть задан одномерный массив прямоугольников, они могут касаться друг-друга, могут нет. Пересечений нет. Порядок прямоугольников следует интуитивному алгоритму: по возрастанию с приоритетом оси Y больше X, начало координат сверху слева, область видимости ограничена сверху и снизу - то есть прямоугольники лежат как-бы построчно. 'Сетки' нет, координаты вещественные. Поиск остановить, как только найдены все соседи, перекрывающие целевую сторону.
Сабж в теме. Дополняю формулировку примером с иллюстрации:
На рисунке разыскиваются соседи восьмого прямоугольника по левой стороне. Это должны быть прямоугольники 5,7,9,12,13. Прямоугольники дальше/раньше даже не рассматривать, что визуально кажется очевидным.
Какие мысли:
1. надо рассматривать каждую отдельную сторону, и делать от целевого прямоугольника некоторое количество шагов по массиву вперёд и/или назад - алгоритм кажется плюс-минус одинаков
2. вроде как нужен счётчик по стороне в виде вектора
[{rect_idx, {side_segment_used_p1, side_segment_used_p2}}]
, так можно будет остановиться по достижении 'конца' и не учитывать прямоугольники, которые не деляют вклада в этот счётчик (в 'красные линии' на иллюстрации)
3. сортировку прямоугольников (построчное размещение) я уже ввёл, без неё совсем мрак
Где-то тут и застрял. Кажется многовато выходит сущностей. А ведь нужен ещё какой-то учёт ситуации, когда 'вклад в сторону' делает не сосед-прямоугольник, а ось координат (стенка). Строгая формулировка критерия остановки. Может ещё что-то. Идеально, если это решённая задача, которую я просто не осилил нагуглить.
Спасибо!