我有一个使用单纯形噪声生成“大陆”的算法,因此它会生成高度图,当像素/图 block 高于某个水平时,它会被识别为陆地,否则就是水。
我遇到的问题是,有时陆地会包围低于海平面的部分。我希望能够识别这些区域,因为它们不是海洋,而是陆地或湖泊。
所以后面的 0 代表水,1 代表陆地:
000000000
001110100
011111110
011001110
001101100
001111000
000000000
中间的3个0会被识别为非海。
我熟悉洪水填充算法。所以我可以做到的一种方法是遍历随机点,如果我找到水,就使用洪水填充,如果它超过一定大小,那么它将是大海。然后,一旦识别出海洋,我就可以通过并识别非海洋物体以获取水。
这似乎效率低下,因为我将不得不处理比装载区域更大的区域,否则它会错误地将区域识别为非海洋区域。
有没有更好的办法?
最佳答案
您提到您已经熟悉洪水填充。为什么不从 map 边缘进行洪水填充以获取海域?任何不从边缘淹没的水体都将成为湖泊。
关于javascript - 在 JavaScript 中识别位掩码中的湖泊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919358/