【问题标题】:Dividing the plane into regions of equal mass based on a density function根据密度函数将平面划分为质量相等的区域
【发布时间】:2020-05-15 07:58:58
【问题描述】:

给定平面中的“密度”标量场,我如何将平面划分为合适的(低惯性矩)区域,以便每个区域包含相似数量的“质量”?

这不是对我的实际问题的最佳描述,但它是我能想到的最简洁的措辞。


我有一张用于游戏的虚构世界的大地图。我非常清楚一个人在一天内可以从这张地图上的任何给定点走多远,这会因地形等而有很大差异。我想通过将地图划分为区域来表示这些信息,以便一天的步行可以带你从任何地区到任何邻近地区。它不一定是完美的,但它应该比简单地将地图划分为六边形网格(这是许多游戏所做的)要好得多。

我的想法是,我可以创建一个与地图尺寸相同的灰度图像,其中每个像素的颜色值代表一个人可以多快地穿过地图上同一位置的像素。维护良好的道路将被编码为白色像素,无法逾越的悬崖将被编码为黑色,或类似的东西。

我的问题是:有没有人知道如何使用这样的灰度图像(“密度”标量场)从上一段(类似“质量”的区域)生成我的“网格”?

我曾考虑将灰度图像用作离散概率分布,从中我可以生成一堆坐标,然后使用某种聚类算法来创建区域,但是 a) 聚类算法会我认为必须创建类似大小的集群才能使该想法起作用,我认为他们通常不会这样做,并且b)我几乎不知道其中任何一个是否有意义,因为我已经出路了我的舒适区。

对不起,如果这不属于这里,我的想法一直是以某种方式以编程方式解决它,所以这似乎是最明智的问题。


更新: 只是想我会分享我到目前为止得到的结果,尝试@samgak 建议的第二种方法 - 递归地将区域细分为框相似的质量,找到每个区域的质心,并从中创建一个 voronoi 图。

我会继续调整,也许会尝试找到一种方法使它不那么像网格(如右上角),但这比我预期的要好得多!

【问题讨论】:

  • “相同大小”有多重要?也就是说,您是否想努力使这些区域完全均匀,或者如果它看起来是随机的并且权重有 2 倍的差异,这可能会更好?
  • 也是“从一个地区到另一个地区”还是“从一个地区的任何一点到另一个地区”?也就是说,即使实际往返山顶需要超过一天的时间,一个地区是否可以包括一座高山?
  • 关于你的第一个问题:我不完全确定你在问什么。从视觉上看,这些区域将具有不同的大小。解决方案的最重要特征是从任何区域到任何相邻区域的旅行都尽可能接近理想值。我想对我来说,最小化最极端的异常值比简单地提高平均值更重要。不确定这是否能回答任何问题。
  • 至于第二个问题:我还没有找到处理非常困难地形的好方法。我想我有点认为区域中心之间的最短路径是相关的衡量标准,但我不确定我应该怎么想。
  • 这可能不是很有帮助,但我认为这是 en.wikipedia.org/wiki/Facility_location_problem 的一个版本,其中位置是州首府以及这些州府生成的 Voronoi 图的州边界。跨度>

标签: algorithm mathematical-optimization


【解决方案1】:

在@samgak 的解决方案的基础上,如果您不想要网格状结构,您可以向您的中心添加一个小的随机扰动。例如,您可以在下面看到我获得的差异:

无干扰

添加一些随机扰动

【讨论】:

    【解决方案2】:

    几个粗略的想法:

    您也许可以重新利用color-quantization 算法,该算法将色彩空间划分为像素数大致相同的区域。您必须进行某种有趣的映射,其中地图中的像素越暗,与您在临时图像中创建的该像素位置相对应的颜色的像素数就越大。然后,您将该图像量化为 x 种颜色,并使用它们的颜色值作为地图中区域中心的坐标,然后您可以从这些点创建一个 voronoi diagram 来定义您的区域边界。

    另一种方法(类似于某些颜色量化算法在后台的工作方式)可能是通过获取每个矩形区域并选择最佳分割线(x 或 y ) 和位置以创建 2 个类似“质量”的较小矩形。你最终会得到 2 个矩形区域的幂,你可以通过取每个矩形的质心(不仅仅是边界框的中心)并从所有中心创建一个 voronoi 图来消除块状-点。这不能保证创建质量完全相等的区域,但它们应该大致相等。该算法可以通过允许沿任意方向(或者可能是有限数量的 8、16、32 等可能方向)的线进行递归拆分来改进,但这当然会使其更加复杂。

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 2015-03-09
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多