Я ищу алгоритм для разметки прямоугольных окон, требования приведены ниже:
- Видны все окна для макета
как маленькие прямоугольники.
- Все окна должны быть размещены на прямоугольном 2D-дисплее, а ширина и высота отображения указаны.
- Есть несколько десятков окон для макета. Каждое окно имеет начальную позицию (x, y) и размер (ширина, высота)
- Алгоритм компоновки попытается разделить окна, чтобы избежать их наложения, чтобы пользователю было легче видеть все окна
Глобальное ограничение (max_x_offset, max_y_offset) задается так, чтобы перемещенная новая позиция каждого окна (new_x, new_y) удовлетворяла ограничению:
abs(new_x - x) <= max_x_offset and abs(new_y - y) <= max_y_offset
Глобальное ограничение является трудным
ограничение, что означает, что если есть
ни один такой макет не может удовлетворить как 4
и 5, мы должны удовлетворить глобальные
ограничение и пусть некоторое окно
перекрытия.
- Алгоритм может быть не лучшим
возможные результаты, но это должно работать
быстро. Мы собираемся использовать это
алгоритм в режиме реального времени рендеринга
применение
Я искал в Google и википедии, а также в некоторых исследовательских работах, но все еще не смог найти подходящий алгоритм для этой задачи. Какие-либо предложения? Спасибо!
Обновление: Да, я понимаю, что это проблема двумерного ранца, и она сложная для NP. Мне нужен быстрый алгоритм, чтобы получить достаточно хороший результат.