Алгоритм для размещения окон на рабочем столе (например, плитка) - PullRequest
8 голосов
/ 16 декабря 2010

Я искал алгоритм для решения проблемы следующим образом:

У меня есть несколько окон, каждое окно можно перемещать и изменять его размер, но с заданным соотношением между шириной и высотой, например.2: 1 (высота: ширина).

Каждое окно не может находиться в другом окне, и все окна должны быть полностью видны.Свободная область (видимость обоев рабочего стола) должна быть минимальной.

Может кто-нибудь сказать мне, какой алгоритм мне нужен для решения этой проблемы?

Привет,

Ответы [ 3 ]

3 голосов
/ 16 декабря 2010

Другим подходом, который может быть проще реализовать, чем упаковкой, было бы разделить размер экрана на необходимое количество панелей, а затем установить окно, которое удовлетворяет другим требованиям внутри панели. Поскольку у вас, вероятно, будет небольшое количество открытых окон в любое время, и поскольку ваш экран не меняет свой размер динамически, вы, вероятно, можете предварительно рассчитать все необходимые меры для 1 - O (100) открытых окон.

1 голос
/ 16 декабря 2010

Один из подходов состоит в том, чтобы рассматривать ее как 2D проблему упаковки , например, проблему упаковки 1D бункера. Например, здесь размещен пример алгоритма с некоторыми хорошими ссылками.

0 голосов
/ 09 июля 2018

Если вы можете ослабить требование, чтобы все окна имели заданное «соотношение сторон», тогда проблема становится очень простой.Предположим, у вас есть N «плитки» для размещения на одном экране, тогда они могут быть расположены в столбцах, где количество столбцов, NumCols - это квадратный корень из N, округленный в большую сторону, когда N не является идеальнымплощадь.Все столбцы плиток имеют одинаковую ширину.Количество плиток в каждом столбце затем N/NumCols округляется в большую или меньшую сторону, если необходимо, чтобы общее количество столбцов составляло N.Это то, что Microsoft Excel делает в View> Arrange All> Tiled.Excel выбирает разместить столбцы с одним меньшим количеством плиток в левой части экрана.

...