Algorithm 什么';生成随机簇和路径的好方法是什么?

Algorithm 什么';生成随机簇和路径的好方法是什么?,algorithm,random,Algorithm,Random,我在胡思乱想写一个随机地图生成器,不太确定如何随机生成真实的风景。我正在研究局部比例尺地图,它提出了一些有趣的问题 最简单的情况之一是: 树木和灌木丛可以存在于同一个空间中,因此一个平均稀疏的森林有25%的典型树木和轻度灌木丛,25%的典型树木,25%的轻度灌木丛和25%的开放空间。中等和茂密的森林需要更多的思考,但这也不是我的问题所在,因为它们都是均匀分布的 我的问题在于生成集群和路径,同时保持百分比约束。以下是一个很好的例子: Moor Swamp

我在胡思乱想写一个随机地图生成器,不太确定如何随机生成真实的风景。我正在研究局部比例尺地图,它提出了一些有趣的问题

最简单的情况之一是:

树木和灌木丛可以存在于同一个空间中,因此一个平均稀疏的森林有25%的典型树木和轻度灌木丛,25%的典型树木,25%的轻度灌木丛和25%的开放空间。中等和茂密的森林需要更多的思考,但这也不是我的问题所在,因为它们都是均匀分布的

我的问题在于生成集群和路径,同时保持百分比约束。以下是一个很好的例子:

                    Moor  Swamp
Shallow bog         20%   40%
Deep bog            5%    20%
Light undergrowth   30%   20%
Heavy undergrowth   10%   20%
深沼泽广场通常聚集在一起,周围是不规则的浅沼泽广场环

另外一个地图元素,树篱,也可能存在,以及一条穿过沼泽的开阔地路径。这两种类型的贴图元素(簇和路径)都存在问题,因为贴图的总组成应该包含元素的X%,但分布不均匀。其他元素(如溪流、池塘和流沙)也需要生成群集或路径类型

在这些约束条件下,我可以使用什么技术生成真实的贴图



我用的是C#,仅供参考(但这不是一个C#特定的问题)。

我从未做过这种事情,但这里有一些想法

通过将随机选择偏压到栅格上靠近该类型现有图元的位置,可以获得簇。将默认值1指定给所有正方形。对于具有现有聚集元素的正方形,将聚集值添加到相邻正方形(聚集值越高,聚集越强烈)。然后根据所有平方的概率分布函数,对该类型的下一个元素进行随机选择


对于路径,您可以有类似的过程,除了路径将逐步扩展(路径的概率在路径末端附近的正方形处是有限的,在其他地方为零)。定向路径可以通过增加路径方向上的选择概率来实现。蜿蜒路径的方向可能在随机延伸过程中发生变化(新方向=mf*旧方向+(1-mf)*随机方向,其中mf是介于0和1之间的动量因子)。

您可以开始阅读链接。我记得我看过更好的文件。如果我找到它,我会发布它(它也是基于L-systems的)

但这是一般的一面;关于你所面临的特殊问题,我想你应该用

  • 百分比
  • 其他规则(群集和路径)
关键是,即使您不知道如何使用给定的属性构造映射,如果您能够评估属性(聚类比率;路径精确性)并对其进行评分,那么您可以使用蛮力或其他问题空间横向

如果你仍然想采用生成性方法,那么你必须更仔细地研究生成性规则;这里有一个想法,我会追求

  • 创建具有“丛生性”、“路径性”或一致性所需属性的不同地形和地形覆盖的图案
  • 创建模式,使深沼泽的值不是离散的,而是分配概率值;在创建模式后,您可以将这种可能性标准化,使其产生所需的覆盖率
  • 把不同的图案混合在一起
现实的“随机”分布通常是使用来完成的,它可以用来给出一个带有“束”的分布,就像你提到的那样。它通过对随机数据点的多层线性插值求和/组合来工作。每一层(或“倍频程”)的数据点数量是最后一层的两倍,并且限制在较窄的值范围内。结果是“逼真”的随机纹理

这是雨果·埃利亚斯的一个美丽的表演

这是我发现的第一件事

您可以做的是生成一个柏林噪声图像并设置一个“阈值”,高于某个值的任何内容都是“开”,低于该值的所有内容都是“关”。你最终会得到一堆东西,这些东西都在阈值以上,看起来不规则,令人敬畏。只需将高于阈值的地形指定给您希望地形特征所在的位置

如果程序生成柏林噪声位图,然后随时间调整截止阈值。清晰的“聚集”是可见的。这可能正是你想要的

请注意,使用高阈值时,上面的点很少,而且是稀疏的。但随着阈值的降低,这些点会“生长”成簇(根据柏林噪声的性质),其中一些簇会相互连接,基本上会创建非常自然和类似地形的东西

请注意,您还可以通过设置柏林噪波函数的“湍流”来设置“聚集因子”或特征聚集的趋势,这基本上会使PN函数的峰值和谷值更加突出并更加接近

现在,在哪里设置阈值?阈值越高,特征在最终贴图上的百分比越低。阈值越低,百分比越高。你可以和他们混在一起。你可能通过摆弄一点数学就能得到准确的百分比(看起来值的分布遵循a;我可能错了)。调整它直到它刚好合适:)

编辑正如评论中指出的那样,您可以通过创建累积直方图(地图百分比低于阈值的索引)找到准确的百分比,并选择提供所需百分比的阈值

这里最酷的一点是,您可以创建围绕某些其他功能(如
                    Moor  Swamp
Shallow bog         20%   40%
Deep bog            5%    20%
Light undergrowth   30%   20%
Heavy undergrowth   10%   20%