2013-12-15 7 views
0

У меня есть несколько окон, и я бы хотел их перекрыть, чтобы покрыть всю рабочую область экрана. Если меньше окон, отдельные окна больше. Окна почти квадраты - пример 800x585. Они всегда масштабируются с фиксированным соотношением.Вычислите размер облицовки окон

enter image description here

В этом примере я только 4 окна, так что мой расчет должен понять, что заполнение экрана осуществляется с помощью 2х2 сетки.

enter image description here

В этом примере у меня 8 окон, но вместо 4 перевалов х 2 строк (которые бы оставить огромный разрыв под 2-м ряда из-за фиксированное соотношения) окна разделены на 3х3 с одним пустое место.

Основная идея - оставить как можно меньше открытого пространства экрана. Я пытаюсь сделать это в AutoIt, но если кто-то может объяснить это в C# или Python я одинаково счастлив :)

ответ

0

скотина алгоритм силы в псевдокоде:


Начало:

Да n быть числом окон.

Найти s, что:

  • SquareRoot s является положительным целым числом
  • s> = п

Пусть впустую зоны = фактическая площадь отходов в квадратной сетке s слоты.

Пусть х = квадратный корень с

Пусть у = квадратный корень с

Для каждого (я, J), где:

  • I и J являются положительными целыми числами

  • я * J = п -------------->я и J являются факторы п

Пусть в = фактическая площадь впустую из прямоугольная сетка (я, J)

Когда < впустую зоны затем

  • установить х к я
  • установить у к J
  • установить неиспользуемого-область к

Следующая (я, J)

Плитка экран с (х, у)

End


Примечание: если некоторые допущения могут быть сделаны относительно отношения окна и отношения экрана, то некоторые пары факторов могут быть исключены. Если никакие предположения не могут быть сделаны, то грубая сила так же хороша, как я могу. Кто-то с более сильным математическим фоном может сделать лучше.

Имея в виду, что на реальном компьютере n может редко быть большим в абсолютном смысле, грубая сила, вероятно, приемлема для многих ситуаций.