【发布时间】:2012-12-17 17:50:43
【问题描述】:
我有一个使用单纯形噪声生成“大陆”的算法,因此它会生成高度图,当像素/图块高于某个水平时,它将被识别为陆地,否则为水。
我遇到的问题是有时陆地会包围低于海平面的部分。我希望能够识别这些区域,因为它们不是海洋,而是陆地或湖泊。
所以后面的0代表水,1代表土地:
000000000
001110100
011111110
011001110
001101100
001111000
000000000
中间的 3 个 0 将被识别为非海。
我熟悉洪水填充算法。所以我可以做到的一种方法是遍历随机点,如果我找到水,则使用洪水填充,如果它超过一定大小,那么它将是大海。然后,一旦识别出海洋,我就可以通过并识别非海洋水体。
这似乎效率低下,因为我必须处理比加载区域更大的区域,否则它会错误地将区域识别为非海洋。
有没有更好的办法?
【问题讨论】:
-
你对 water 和 sea 的使用让我很困惑。话虽如此,您从未提到该位图中的
1和0代表什么 -
在检查方块的边界时必须加载相邻的方块似乎并不是一个容易避免的问题。
-
Alex 我已经澄清了 1 和 0。水覆盖世界,最大的水体是大海。
-
airza 你可能是对的,如果有其他解决方案来解决这个问题还是很高兴
-
能否先生成没有湖泊的大陆,然后再随机挖掘湖泊?
标签: javascript algorithm flood-fill