【问题标题】:Delaunay Triangulation failing on the third row of a gridDelaunay 三角测量在网格的第三行失败
【发布时间】:2015-06-22 02:34:51
【问题描述】:

我正在尝试用一个简单的网格作为测试输入来实现 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
        ));
    }

});

这里出了什么问题? Fiddle

编辑:不是重复边缘没有被删除的问题......这是我之前的问题。现在已经解决了。您可以将此处的图像与此处的图像进行比较以查看。

【问题讨论】:

标签: javascript delaunay


【解决方案1】:

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

【讨论】:

  • 既然这些是我需要的顶点,那么一旦它们被删除我该怎么办?我稍后再添加它们吗?
  • @Idlackage:当他们用你的新点形成一个三角形时,你把它们加回来?
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 2020-06-02
  • 2014-03-18
  • 2014-05-16
  • 2019-12-13
  • 1970-01-01
  • 2015-09-26
  • 2015-01-07
相关资源
最近更新 更多