0

我有一个使用单纯形噪声生成“大陆”的算法,因此它会生成一个高度图,当像素/图块高于某个水平时,它将被识别为陆地,否则它是水。

我遇到的问题是有时土地会包围低于海平面的部分。我希望能够识别这些区域,因为它们不是海洋,而是陆地或湖泊。

所以下面的0代表水,1代表土地:

000000000
001110100
011111110
011001110
001101100
001111000
000000000

中间的 3 个 0 将被识别为非海。

我熟悉洪水填充算法。所以我可以做到的一种方法是遍历随机点,如果我找到水就使用洪水填充,如果它超过一定大小,那么它将是大海。然后,一旦识别出海洋,我就可以通过并识别非海洋水体。

这似乎效率低下,因为我必须处理比加载区域更大的区域,否则它会错误地将区域识别为非海洋。

有没有更好的办法?

4

2 回答 2

2

您只想计算所有单元的连接组件0。最大的组成部分是海,其他任何组成部分都是湖泊。这可以在线性时间内完成(请参阅链接页面的算法部分)。

于 2012-12-17T20:32:15.147 回答
2

您提到您已经熟悉洪水填充。为什么不从地图边缘进行洪水填充以获得大海?任何没有从边缘泛滥的水体都将成为湖泊。

于 2012-12-17T18:10:45.983 回答