Хорошая структура данных для представления 2D-карты / сетки, которую можно увеличивать и уменьшать? - PullRequest
2 голосов
/ 28 марта 2011

Я построил 2D-сетку в Java, где каждая ячейка может иметь определенный атрибут, скажем, цвет. На каждой итерации основного цикла этот цвет может меняться.

Что я хочу сделать:
- при увеличении отобразится небольшое подмножество сеток и фактический цвет каждой сетки.
- когда вы уменьшаете масштаб и видите больше ячеек одновременно, ячейки начинают становиться слишком маленькими, чтобы их можно было видеть по отдельности, поэтому я хочу иметь возможность просто представить эту область (набор ячеек) одним цветом (скажем, наиболее часто встречающийся в этой коллекции)

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

Есть ли лучший способ сделать это? Кажется, что эта проблема должна была решаться раньше людьми в мире графики / игр, но у меня возникают проблемы даже с поиском правильных ключевых слов для Google, поэтому любая помощь или направление приветствуются. Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 марта 2011
0 голосов
/ 28 марта 2011

Я думаю, вы на правильном пути.То, что вы предлагаете, - это типичная реализация 2D-графа сцены и определение границ родительских узлов.

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

Я думаю, вам следует реализовать то, что вы предлагаете, и посмотреть, действительно ли проблема в производительности,Сколько клеток в вашей сетке?

...