【问题标题】:Best way to represent (store ) area of a region表示区域(存储)区域的最佳方式
【发布时间】:2013-01-11 02:04:06
【问题描述】:

嗯,我正在开发一个模拟,部落(组)中的代理可以在固定大小的地图中竞争他们拥有多少区域。(地图是 2D 地图)。他们通过分组互相战斗来竞争,获胜的组得到另一组的所有。这个模拟是用java编写的。

我试图获得一些想法的主要问题是我应该如何存储每个组拥有多少地图。起初我只是使用 Dimension 的一个实例,然后每次一组代理获胜一个将其添加到维度的区域。然而,问题是拥有的区域可以位于地图中的任何位置,区域之间有间隙,如下图所示。(抱歉图片不佳,试图使用 gimp 画出问题)

注意:不同颜色的矩形代表代理所拥有的区域,而紫色圆圈代表代理本身

现在另一个想法是有一个维度类型的 ArrayList 来保存特定部落代理人拥有的所有区域。

但我正在考虑是否有更好的方法来做到这一点。

【问题讨论】:

    标签: java dimensions area


    【解决方案1】:

    如果我能给你一些建议,当我之前在做一些与图表相关的事情时,在一篇论文中我发现了如何将图表转换为地图的想法,抱歉我不记得那篇论文的标题 但我记得,他们使用的是voronoi图, 在这种情况下,您可以将地图数据存储为一组对象,其中包含代理和团队 ID 执行的操作坐标

    你也可以引入sales vlume,它可以用来解决重叠区域的冲突(区域90%的销售额属于A,所以90%的区域也会给他们)

    【讨论】:

      【解决方案2】:

      每个部落之间存在一对多(技术上是一对零或多)的关系,以及该部落拥有多少个地区。您有 3 个基本选择来表示任何一对多关系。

      1. You can place a reference in each child to the parent
      2. You can manage a list of children in each parent
      3. You can manage a list of parent-child pairings separately
      

      我要问自己的问题是,您想从模拟中得出什么结果?从那里开始并向后工作。例如,如果您的目标是按部落报告所拥有的东西,那么管理每个部落对象内的区域列表可能是最有效的。如果您的目标是显示谁拥有每个区域的报告,那么在每个区域的对象内引用拥有部落可能会更简单。如果您支持多个视图,那么在这两个地方进行管理也是合理的。

      第三个选项,管理对象本身之外的关系,在也可能支持多对多关系的时候最有用,比如允许玩家成为多个部落的成员。

      【讨论】:

        猜你喜欢
        • 2018-02-15
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        • 2020-09-05
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多