【发布时间】:2020-05-15 07:58:58
【问题描述】:
给定平面中的“密度”标量场,我如何将平面划分为合适的(低惯性矩)区域,以便每个区域包含相似数量的“质量”?
这不是对我的实际问题的最佳描述,但它是我能想到的最简洁的措辞。
我有一张用于游戏的虚构世界的大地图。我非常清楚一个人在一天内可以从这张地图上的任何给定点走多远,这会因地形等而有很大差异。我想通过将地图划分为区域来表示这些信息,以便一天的步行可以带你从任何地区到任何邻近地区。它不一定是完美的,但它应该比简单地将地图划分为六边形网格(这是许多游戏所做的)要好得多。
我的想法是,我可以创建一个与地图尺寸相同的灰度图像,其中每个像素的颜色值代表一个人可以多快地穿过地图上同一位置的像素。维护良好的道路将被编码为白色像素,无法逾越的悬崖将被编码为黑色,或类似的东西。
我的问题是:有没有人知道如何使用这样的灰度图像(“密度”标量场)从上一段(类似“质量”的区域)生成我的“网格”?
我曾考虑将灰度图像用作离散概率分布,从中我可以生成一堆坐标,然后使用某种聚类算法来创建区域,但是 a) 聚类算法会我认为必须创建类似大小的集群才能使该想法起作用,我认为他们通常不会这样做,并且b)我几乎不知道其中任何一个是否有意义,因为我已经出路了我的舒适区。
对不起,如果这不属于这里,我的想法一直是以某种方式以编程方式解决它,所以这似乎是最明智的问题。
更新: 只是想我会分享我到目前为止得到的结果,尝试@samgak 建议的第二种方法 - 递归地将区域细分为框相似的质量,找到每个区域的质心,并从中创建一个 voronoi 图。
我会继续调整,也许会尝试找到一种方法使它不那么像网格(如右上角),但这比我预期的要好得多!
【问题讨论】:
-
“相同大小”有多重要?也就是说,您是否想努力使这些区域完全均匀,或者如果它看起来是随机的并且权重有 2 倍的差异,这可能会更好?
-
也是“从一个地区到另一个地区”还是“从一个地区的任何一点到另一个地区”?也就是说,即使实际往返山顶需要超过一天的时间,一个地区是否可以包括一座高山?
-
关于你的第一个问题:我不完全确定你在问什么。从视觉上看,这些区域将具有不同的大小。解决方案的最重要特征是从任何区域到任何相邻区域的旅行都尽可能接近理想值。我想对我来说,最小化最极端的异常值比简单地提高平均值更重要。不确定这是否能回答任何问题。
-
至于第二个问题:我还没有找到处理非常困难地形的好方法。我想我有点认为区域中心之间的最短路径是相关的衡量标准,但我不确定我应该怎么想。
-
这可能不是很有帮助,但我认为这是 en.wikipedia.org/wiki/Facility_location_problem 的一个版本,其中位置是州首府以及这些州府生成的 Voronoi 图的州边界。跨度>
标签: algorithm mathematical-optimization