Эта проблема на самом деле имеет дело с roll-overs, я просто обобщил ниже как таковой:
У меня есть 2D-представление, и у меня есть ряд прямоугольников в области на экране. Как распределить эти ящики так, чтобы они не перекрывали друг друга, а только корректировали их с минимальным перемещением?
Позиции прямоугольников являются динамическими и зависят от пользовательского ввода, поэтому их позиции могут быть в любом месте.
Прикрепленные изображения показывают проблему и желаемое решение
На самом деле проблема с реальной жизнью связана с опрокидываниями.
Ответы на вопросы в комментариях
-
Размер прямоугольников не фиксирован и зависит от длины текста при опрокидывании
-
О размере экрана, сейчас я думаю, что лучше предположить, что размер экрана достаточно для прямоугольников. Если слишком много прямоугольников, и алгоритм не дает никакого решения, тогда мне просто нужно настроить содержимое.
-
Требование "минимально двигаться" больше для асететики, чем для абсолютного требования к инженерным требованиям. Можно выделить два прямоугольника, добавив огромное расстояние между ними, но оно не будет выглядеть хорошо как часть графического интерфейса. Идея состоит в том, чтобы получить опрокидывание/прямоугольник как можно ближе к его источнику (который я затем подключу к источнику с черной линией). Таким образом, "перемещение только одного для x" или "перемещение как для половины x" отлично.