algorithm - 在二维网格上创建随机形式

标签 algorithm

我想创建一个随机世界。为简单起见,我们假设它基于每个边长为 1m 的二维单元网格。

现在我使用一个简单的算法来创建随机形式(对于森林、湖泊等):

1. fill a circle of radius r with the wanted property
2. choose 4 points on the edge of this circle and
3. goto (1.) with all those four points as center and r/1.3

我有点喜欢这个,因为它创建的表单具有随机形式,并且圆圈的底层形式通常不可见。

但是有两个问题:

  1. 有时(当选择的前四个点彼此距离太近时)森林的基本形状变得显而易见
  2. 该算法的性能非常低下。单元格被一遍又一遍地填充,因为圆圈总是重叠+所有这些距离计算等。

so: Is there any algorithm that is successfully used to create random forms? I am sure I am not the first person who ever wanted to do this...

我考虑过选择随机点并形成它们的凸包 - 但我不想将自己局限于凸形式。在极坐标中为不同角度选择随机距离只会产生星域 - 这又是我不想要的限制......

最佳答案

当然,如果您只是想要一些有用的东西,有些库可以像 Joachim Pileborg 推荐的那样执行此操作。但是,如果您希望在这个项目中获得更多乐趣并学习一些知识,我建议您查看 random midpoint displacement fractal又名钻石平方算法。它非常擅长制作自然景观。您还应该阅读 Perlin noise当你在做的时候;它有点过时,但对于学习基础知识来说是一个良好的开始。

关于algorithm - 在二维网格上创建随机形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384462/

相关文章:

c# - 恢复 "parent - child"关系树的最有效方法是什么?

algorithm - 找到最接近 S 的中位数的值

python - K-最近邻找到所有关系

algorithm - 类似于反向随机数生成器的东西

C算法确定点阵中最大的多边形

algorithm - 使用 Google map 解决旅行商问题的实用方法是什么?

algorithm - 数据结构和算法书籍,适合从业者而非学术人士

algorithm - 从列表中删除项目 - 算法时间复杂度

c++ - spoj : ONP - Transform the Expression

c++ - Laderman 的 3x3 矩阵乘法只有 23 次乘法,值得吗?