在2d网格上创建随机表单

时间:2013-01-17 17:14:39

标签: algorithm

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

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

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. 该算法非常难以理解。细胞一遍又一遍地填充,因为圆圈总是重叠+所有那些距离计算等。
  3.   

    so:有没有成功用于创建随机表单的算法?我相信我不是第一个想做这件事的人......

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

2 个答案:

答案 0 :(得分:2)

当然,如果你只是想要一些有用的东西,那么就像Joachim Pileborg推荐的那样有一些库。但是,如果您希望在此项目期间获得更多乐趣并稍微学习一下,我建议您查看random midpoint displacement fractal又称Diamond-square算法。它非常擅长制作自然风景。您还应该在Perlin noise时阅读;它有点过时,但是学习基础知识的良好开端。

答案 1 :(得分:1)

您可以使用类似libnoise的内容来创建高度贴图,但不要将它们用于高度贴图,而是针对不同类型的地形使用不同的“高度”。使用libnoise,您可以生成一个小的地形区域,当您需要下一个部分时,它可以生成一个与之前生成的区域无缝匹配的区域。