Крутится у меня в голове интересная задачка(во всяком случае мне так кажется), которую пока не решил. Эта нерешенная задача побудила написать пост помощи. =)
Итак: У нас есть холст: 100x100, черного цвета
На нем хаотично, в центре разбросаны прямоугольники разного размера, прямоугольники не повернуты(каждая сторона прямоугольника параллельна стороне холста). Все они полностью или частично соприкасаются ребрами друг с другом.
Задача: к каждому прямоугольнику добавить отступ, 5 например, белого цвета. Но, так как все объекты, соприкасаются, после добавления отступа, этот отступ окажется на них самих, по этому, все перекрывающиеся объекты нужно раздвинуть. Каждый объект должен соприкасаться, но не перекрываться.
Вопрос: как раздвинуть объекты, не меняя кардинально их изначальную позицию по отношению к соседнему.
Для наглядности добавил изображение.

P.S. объекты не обязательно могут располагаться в ряд, и их не обязательно будет именно 3
Как я думаю решать задачу:
Пробегаемся по объектам, сравнивая их друг с другом, и ищем пересечение точек с другими объектами.
При найденом пересечении, узнаем
- на какой грани пересечение(что бы знать по какой оси сдвигать объект)
- какой объект дальше удален от центра
Сдвигаем по нужной оси к краю холста дальний объект.
Что мне не нравится:
- Много кода, хотя на первый взгляд, простая задача.
- Если объектов будет 20 (что маловероятно), то цикл сравнивания и сдвига объектов будет иметь очень много итераций.
- Ну и в целом такая идея просчета настораживает.
Как бы вы решили эту задачу?