алгоритм позиционирования окна - PullRequest
1 голос
/ 05 февраля 2011

Мне нужен алгоритм, который найдет место для окна гаджета в первом доступном пространстве между другими окнами гаджета, уже находящимися на экране. В основном экран будет содержать окна гаджетов разных размеров, все в разных позициях. При добавлении на экран другого гаджета фиксированного размера мне нужен способ тренировки, где гаджет можно разместить, т. Е. В пустом пространстве между гаджетами. Если алгоритм не смог найти нужное пространство, то гаджет просто разместится в нижней части существующих гаджетов.

Я думал о создании двумерного массива в, представляющего экран, содержащий все гаджеты и занимаемое ими пространство, но я думаю, что, вероятно, есть более эффективный способ сделать это.

Требования следующие

  1. Перемещаясь слева направо / сверху вниз, найдите первое доступное пустое пространство, которое будет полностью соответствовать окну гаджета с фиксированным отступом от окружающих гаджетов.
  2. Если пустое место не найдено, поместите гаджет в левом нижнем углу всех других гаджетов.

Спасибо.

1 Ответ

2 голосов
/ 05 февраля 2011

Предположим, вы нашли место для нового гаджета.

  1. Перемещайте его влево, пока он не достигнет края экрана или правого края другого гаджета.
  2. Перемещайте его вверх, пока он не достигнет края экрана или нижнего края другого гаджета.

Это означает, что вы можете просто попробовать все комбинации x из набора {0, g1.right, g2.right, .., gn.right} и все комбинации y из набора {0, g1.bottom, g2.bottom, .., gn.bottom}.

Довольно просто и дает O(n^3) сложность. (n^2 сверху и еще один n для проверки доступности позиции)

...