生成随机互锁区域(即国家)

时间:2017-12-02 22:49:11

标签: algorithm random pseudocode

(从here重新发布并更新,因为事实证明我的问题与Mathematica没有严格关系。)

我试图将平面的有限部分细分为一组至少20个左右的随机互锁形状,形状边界的分形维数围绕国家之间的边界,而不仅仅是直线(其中根据对Wikipedia's list of fractals by Hausdorff dimension的目视检查,我粗略估计为1.15±0.1。优选地,该平面将具有环形边界条件,尽管产生另一个类似国家的形状以用作整个边界也是可接受的。 (正如我发现的那样,这个问题并不严格地与任何语言有关,所以我正在寻找一种通用的算法,或者至少可以让我从正确的方向开始。)

在圆环上运行Kruskal的迷宫生成算法(并且只保留边界)给出了正确的分形维数,但这只创建了一个通过平移平铺平面的形状。一次运行DFS算法的多个实例(同样,仅保留各个子迷宫之间的边界)会产生非常不切实际的狭窄部分。 (此外,在这两种情况下,结果都是由微小的离散单元组成,这对于足够高的分辨率来说不是问题,并且可能会稍微简化一些事情)。使用Delauney三角剖分是制作代表国家系统的图表的绝佳方法,但其相应的Voronoi图表可以形成完美的直边界。

(遗憾的是,由于此特定Stack Exchange网站缺乏声誉,此时无法发布图片,但它们位于第一个链接中)

作为原始帖子的更新,我找到了一种合适的方法,可以使用Life-like元胞子自动机B5678 / S45678(多数)创建一个类似国家的形状。它进行如下(如果这给任何人任何想法):

  1. 从一个小的填充随机形状开始(很容易通过运行直到稳定上述规则中的一个小的2D随机位数组)。
  2. 用该元素的2×2块替换数组的每个元素。
  3. 通过在外部添加合适的0s边距来扩展阵列。 (此步骤可能并非总是必要的。)
  4. 随机切换阵列中所有细胞的25%,以引起扰动。
  5. 按照上述规则运行数组,直到稳定。
  6. 重复步骤2-5,直至达到所需的尺寸。
  7. Kruskal迷宫一代:

    Kruskal maze generation

    16倍DFS迷宫生成:

    16-fold DFS maze generation

0 个答案:

没有答案