Вы можете смоделировать это набором «свободных» прямоугольников, начиная с одного с координатами 0,0, размера (x, y). Каждый раз, когда вам нужно добавить еще один прямоугольник, выберите один из оставшихся «свободных» прямоугольников, сгенерируйте новый прямоугольник (с координатами и размером верхнего левого угла, чтобы он был полностью помещен), и разбейте этот прямоугольник, а также любое другое перекрытие » свободный », такой, чтобы дети выражали оставшееся свободное пространство. Это приведет к появлению от 0 до 4 новых прямоугольников (0, если новый прямоугольник точно соответствовал размеру старого свободного прямоугольника; 4, если он посередине и т. Д.). Со временем вы будете получать все меньше и меньше свободных областей, поэтому создаваемые вами прямоугольники также будут меньше.
Хорошо, не очень подробное объяснение, его легче показать на доске. Но модель, которую я использовал для нахождения стартовой позиции для недавно вырезанных и вставленных компонентов графического интерфейса; легко отслеживать доступные фрагменты экрана и выбирать (например) левую или верхнюю часть такой области.