Задать вопрос
  • Алгоритм поиска пустых прямоугольников?

    @majalineage
    все очень просто. с начало добавляем рект на все поле в некий лист nodes. потом бежим по всем ректам которые есть на поле, пусть он будет CurrentRect, и для каждого выполняем алгоритм:
    бежим по всем nodes от i = 0 до nodes.Count - 1 (во время пробегания nodes.Count может меняться)
    {
    Берем nodes[i] и если он пересекается с CurrentRect (именно пересекается а не касается) выполняем следующее:
    {
    Обрезаем его по CurrentRect. как именно: с начало снизу, если есть что резать пихаем в nodes новый рект а текущий урезаем по CurrentRect, и так по всем сторонам
    Первый в прогоне запоминаем как основной, который в итоге останется на месте CurrentRect, если он меньше CurrentRect, растягиваем его по CurrentRect.
    Все остальные после разрезаний удаляем (куски которые будут лежать в CurrentRect, они лишние) и делаем i--
    }
    }
    Далее можно сделать оптимизацию, найти ректы с одинаковыми гранями и объединить их. Еще можно что-то придумать. Но это уже задачка по легче
    Ответ написан
    Комментировать