我有一个使用单纯形噪声生成“大陆”的算法,因此它会生成一个高度图,当像素/图块高于某个水平时,它将被识别为陆地,否则它是水。
我遇到的问题是有时土地会包围低于海平面的部分。我希望能够识别这些区域,因为它们不是海洋,而是陆地或湖泊。
所以下面的0代表水,1代表土地:
000000000
001110100
011111110
011001110
001101100
001111000
000000000
中间的 3 个 0 将被识别为非海。
我熟悉洪水填充算法。所以我可以做到的一种方法是遍历随机点,如果我找到水就使用洪水填充,如果它超过一定大小,那么它将是大海。然后,一旦识别出海洋,我就可以通过并识别非海洋水体。
这似乎效率低下,因为我必须处理比加载区域更大的区域,否则它会错误地将区域识别为非海洋。
有没有更好的办法?