2

我想创造一个随机的世界。为简单起见,假设它基于每个单元格的二维网格,每个单元格的边长为 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. 该算法的性能非常差。单元格被一遍又一遍地填充,因为圆圈总是重叠+所有这些距离计算等。

所以:有没有成功用于创建随机形式的算法?我敢肯定我不是第一个想要这样做的人......

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

4

2 回答 2

2

当然,如果你只是想要一些有用的东西,有一些库可以像 Joachim Pileborg 推荐的那样做。但是,如果您希望在这个项目中获得更多乐趣并学习一点,我建议您研究随机中点位移分形,即菱形平方算法。它非常擅长制作自然景观。您还应该在阅读Perlin 噪音时阅读它;它有点过时,但是学习基础知识的良好开端。

于 2013-01-18T04:01:34.670 回答
1

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

于 2013-01-17T17:22:43.623 回答