是否有算法在两个3D点列表之间创建网格,每个列表形成一个完整的循环?
在链接图像中,红点是第一组,蓝色是第二组,灰色是连接两组的三角形所需的输出,填补了它们之间的空隙。
这个image显示我想要在3d中完成的工作,紫色点形成第一个地形的轮廓,其他点形成第二个地形中的洞的轮廓,算法应该创建一个网格填充内外轮廓之间的空隙。
答案 0 :(得分:1)
您可以验证以下方法是否有效吗?基本思路是,当您绕着内部节点循环时,您将获得距离外部节点最近的节点并添加边缘。外环上最近的应该是已经设置的那个,或者它的一个邻居。所以你可以利用它,如下:
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
答案 1 :(得分:0)
输入是两个点循环,这样一个循环就在其他循环中。
想法是通过在相同方向上遍历循环来连接点(并行)。在外部循环中找到一个点,在内部循环中找到一个点,使得连接它们的段不与任何循环相交。有两种可能性可以移动到下一个段,在内环上移动点或在外环上移动点。测试这两个段是否与循环交叉,以及(如果需要)由最后一个段和下一个段生成的三角形质量,并确定要使用的下一个段。重复移动线段,直到整点返回初始线段。