Java 是否有良好的数据结构来表示可以放大和缩小的二维地图/栅格?

Java 是否有良好的数据结构来表示可以放大和缩小的二维地图/栅格?,java,data-structures,grid,2d,zooming,Java,Data Structures,Grid,2d,Zooming,我用java构建了一个2D网格,其中每个单元格都可以有特定的属性,比如颜色。在主循环的每次迭代中,该颜色可能会改变 我想做的事情: -放大后,它将显示网格的一小部分以及每个网格的实际颜色。 -当你一次缩小并看到更多的单元格时,这些单元格将变得太小而无法单独看到,因此我希望能够将该区域(一组单元格)表示为单一颜色(例如该集合中最常出现的颜色) 我想做的一件事是使用层次结构的树/金字塔结构,在叶子上你有每个细胞。每个父节点都包含其每个子节点的摘要信息。因此,要在高缩放级别绘制地图,我只需要在树中向下

我用java构建了一个2D网格,其中每个单元格都可以有特定的属性,比如颜色。在主循环的每次迭代中,该颜色可能会改变

我想做的事情:
-放大后,它将显示网格的一小部分以及每个网格的实际颜色。
-当你一次缩小并看到更多的单元格时,这些单元格将变得太小而无法单独看到,因此我希望能够将该区域(一组单元格)表示为单一颜色(例如该集合中最常出现的颜色)

我想做的一件事是使用层次结构的树/金字塔结构,在叶子上你有每个细胞。每个父节点都包含其每个子节点的摘要信息。因此,要在高缩放级别绘制地图,我只需要在树中向下移动几层,而不是逐个查看每个单元格。然而,在一个大网格中,每次循环迭代似乎都需要相当长的时间才能将变化从叶子传播到父级,然后再传播到每个更高的级别


有更好的方法吗?这个问题似乎应该由图形/游戏世界的人来处理,但我甚至很难找到谷歌的关键词,所以任何帮助或指导都是非常感谢的。谢谢。

我想你说得对。您建议的是2D场景图的典型实现,并确定父节点的边界

请记住,即使叶节点可能会更改颜色,但由于之前的状态,更改可能不会一直向上传播。您需要确保的是跟踪脏树叶,这样您就不会在不必要时对所有内容进行更新


我认为你应该实施你的建议,然后看看性能是否真的是一个问题。网格中有多少个单元格?

也许四叉树是一个有用的搜索词


那么每个小单元的颜色在每次迭代中都会发生变化?请详细说明发生了什么变化以及如何变化(是随机的)。另外:地图的细节在每个地方都是一样的吗?它基本上是一个生物模拟器。每种生物都居住在一个细胞中,每转一圈都可以移动。他们的运动模式由行为/决策组件决定,这些组件可能有些随机。我想做的是能够将整个地图放大,并根据该地区最主要物种的颜色对整个地图进行着色显示。哦..四叉树!我没想到。可能对生物显示不起作用,因为这种变化非常频繁,但我可能会尝试使用四叉树来显示更静态的地形/树叶。谢谢你的建议。嗯……这很有道理。在某些情况下,我可能不需要在每个循环中重新绘制。延迟和批处理更新传播似乎有助于减少一些工作。我正努力使它尽可能大。到目前为止,我只尝试了大约500x500个单元格,但它开始延迟,因为我目前只绘制所有内容,即使颜色在高缩放时无法正确显示(由于锯齿)。谢谢你的建议。