Javascript Delaunay三角剖分在网格的第三行失败

Javascript Delaunay三角剖分在网格的第三行失败,javascript,delaunay,Javascript,Delaunay,我试图用一个简单的网格作为测试输入来实现Delaunay三角剖分,它似乎一直工作到第三行,在第三行中三角形开始重叠 第1行和第2行 第3排 决赛 我很难理解到底是什么导致了这种行为。下面是一些伪代码: for each vertex v edgeBuffer = []; for each triangle if v is in the triangle's circumscribed circle for each edge in th

我试图用一个简单的网格作为测试输入来实现Delaunay三角剖分,它似乎一直工作到第三行,在第三行中三角形开始重叠

第1行和第2行

第3排

决赛

我很难理解到底是什么导致了这种行为。下面是一些伪代码:

for each vertex v
    edgeBuffer = [];
    for each triangle
        if v is in the triangle's circumscribed circle
            for each edge in the triangle
                check if it's already in edgeBuffer
                if not, add it
                otherwise, remove it
            remove triangle
    for each edge in edgeBuffer
        create a new triangle between edge and v
实际代码:

$("#add").click(function () { // User clicks a button to add the next vertex

    currVertIndex++;
    var v = vertList[currVertIndex];
    var edges = [];

    for (var i = 0; i < triangles.length; i++) {
        if (triangles[i].circc.containsVertex(v)) {
            var nextIndex;
            for (var e = 0; e < 3; e++) {
                nextIndex = (e + 1 == 3) ? 0 : e + 1;
                var newEdge = new Edge(triangles[i].v[e], triangles[i].v[nextIndex]);
                edges = addEdgeIfNew(newEdge, edges);
            }
            triangles.splice(i, 1);
            i--;
        }
    }

    for (var i = 0; i < edges.length; i++) {
        triangles.push(new Triangle(
            edges[i].v[0],
            edges[i].v[1],
            v
        ));
    }

});
这里出了什么问题


编辑:这不是没有删除重复边的问题…这是我以前的问题。现在已经修好了。您可以将此处的图像与此处的图像进行比较,以了解这一点。

如果三角形重叠,则当前三角形的外球面中有4个顶点。然后,您需要删除所有4个顶点。

尝试在Chrome中运行该小提琴,您会发现JS中有很多错误需要首先修复。可能的重复由于这些是我需要的顶点,一旦删除它们,我该如何处理它们?我以后再添加它们吗?@Idlackage:当它们与你的新点形成三角形时,你会再添加它们吗?