You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Marching Squares算法的海洋网格凹曲线孔洞问题求解

Marching Squares海洋网格生成的凹曲线孔洞问题

我正在开发一款基于Marching Squares算法的海洋网格生成算法,通过判断网格点是否处于海平面以下或恰好位于海平面来生成轮廓。当前遇到的核心问题是:凹曲线上会出现孔洞(凸曲线上海洋网格嵌入陆地网格的表现符合预期)。

以下是获取图中紫色顶点位置的核心代码:

Vector2 GetLerpedEdgePoint(CellPoint cellPoint, Vector2 gridPos)
{
    int corner1Index = cellPoint.AdditionalPos.Corner1Offset;
    int corner2Index = cellPoint.AdditionalPos.Corner2Offset;
    // 获取顶点的海洋数据,用到"DistanceToZero"值
    OceanVertData Corner1VertData = _corners[corner1Index];
    OceanVertData Corner2VertData = _corners[corner2Index];
    // 在两个顶点间插值得到边缘点
    Vector2 corner1Pos = _gridPosOffsets[corner1Index] + gridPos;
    Vector2 corner2Pos = _gridPosOffsets[corner2Index] + gridPos;
    // 海平面被视为0,但为了插值公式生效,我将其视为1,所以给a和b各加1
    float a = Corner1VertData.DistanceToOceanLevel + 1;
    float b = Corner2VertData.DistanceToOceanLevel + 1;
    return LerpCloseToOne(a , b, corner1Pos, corner2Pos);
}

Vector2 LerpCloseToOne(float valueA, float valueB, Vector2 a, Vector2 b)
{
    return Vector2.Lerp(a, b, (1 - valueA) / (valueB - valueA));
}

直接提高海平面只是治标不治本的临时方案,我也考虑过让边缘点成为陆地曲线切线的一部分,但不确定具体实现方式。请问该如何彻底解决凹曲线的孔洞问题?

问题示意图:
凹曲线轮廓孔洞问题

内容的提问来源于stack exchange,提问作者Stefan Carpeliuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:08:20