Graphics 在两组点之间创建网格的算法

Graphics 在两组点之间创建网格的算法,graphics,3d,mesh,Graphics,3d,Mesh,是否有算法在两个3D点列表之间创建网格,每个列表形成一个完整的循环 在链接图像中,红色圆点是第一组,蓝色圆点是第二组,灰色是连接两组的三角形的期望输出,以填充两组之间的间隙 这显示了我在3d中想要做的事情,紫色点形成第一个地形的轮廓,其他点形成第二个地形中一个洞的轮廓,算法应该创建一个网格来填充内部和外部轮廓之间的间隙。输入是两个点环,这样一个循环在另一个循环中 这个想法是通过在同一方向(平行)遍历循环来连接点。在外循环中找到一个点,在内循环中找到一个点,这样连接它们的段就不会与任何循环相交。

是否有算法在两个3D点列表之间创建网格,每个列表形成一个完整的循环

在链接图像中,红色圆点是第一组,蓝色圆点是第二组,灰色是连接两组的三角形的期望输出,以填充两组之间的间隙


这显示了我在3d中想要做的事情,紫色点形成第一个地形的轮廓,其他点形成第二个地形中一个洞的轮廓,算法应该创建一个网格来填充内部和外部轮廓之间的间隙。

输入是两个点环,这样一个循环在另一个循环中


这个想法是通过在同一方向(平行)遍历循环来连接点。在外循环中找到一个点,在内循环中找到一个点,这样连接它们的段就不会与任何循环相交。有两种可能移动到下一段,移动内环上的点或移动外环上的点。测试这两段是否与回路相交,以及(若需要)上一段和下一段生成的三角形的质量,并确定要使用的下一段。重复移动线段,直到整点返回到初始线段。

能否验证以下方法是否有效。基本思想是,当您围绕内部节点循环时,您将获得距离外部节点最近的节点并添加一条边。外环上最近的应该是已经设置的环,或者是它的一个相邻环。所以你可以利用它,就像这样:

innernode = firstnode(innerloop)
outernode = NULL

while(innernode) do

    if(outernode) then
        //For every new node, check if the outer node is the nearest, 
        //or if any of its neighbours are
        newouternode = find_nearest_among(outernode, prev(outernode), 
                                            next(outernode), innernode)
        if(newouternode != outernode) then
            //If we found a new node, add an extra edge, 
            //otherwise, we'll have quads
            //The figure shows why this is needed.
            make_edge(innernode, outernode)
            outernode = newouternode 
        end
    else
        //the first time, find the closest node in the outer loop)
        outernode = find_nearest(outerloop, innernode)
    end
    //continue making an edge to the outernode, we're closest to
    make_edge(innernode, outernode)

    //move on
    innernode = next(innernode)
end

请告诉我们您尝试过什么?最终您将得到一个tet网格,它将在3D中连接外表面和内表面。这是你需要的吗?如果可以的话,你能告诉我你为什么需要这个,在3d中。我已经编辑了这个问题,并添加了另一张图片和一个关于我正试图做的事情的解释。这参考了一些网格技术。谢谢你的回答,但我想你在这里提出的建议对我的问题或一般的3d都不起作用,我链接了一个新的图像:正如你所看到的,形成轮廓的紫色圆点需要用三角形与形成另一个轮廓的另一组圆点连接,以填充裂缝。感谢Arun,我已经验证了它,并且它在上述用例中按预期工作,我也在寻找一个通用算法,我认为这个算法可能对未来的任何人都有帮助