我想创建一个随机世界。为简单起见,我们假设它基于每个边长为 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
我有点喜欢这个,因为它创建的表单具有随机形式,并且圆圈的底层形式通常不可见。
但是有两个问题:
- 有时(当选择的前四个点彼此距离太近时)森林的基本形状变得显而易见
- 该算法的性能非常低下。单元格被一遍又一遍地填充,因为圆圈总是重叠+所有这些距离计算等。
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/