网状物上的表面扩张/侵蚀

时间:2014-10-24 15:32:07

标签: c++ algorithm geometry computational-geometry mesh

我正在3D网格上执行平面检测。为了填补小洞,我想进行扩张/侵蚀步骤。对于每个平面,我知道方程和相应的方面(由与方面的ID相对应的集合表示)。

目前,我有以下算法:

set<int> sFacetsDil;
for(set<int>::iterator it = Planes.sFacets.begin(); it != Plane.sFacets.end(); it++)
{
    Facet f = facetMap.at(*it);
    vector<Facet> vFacets = facetAround(f);
    for(int i = 0; i < vFacets.size(); i++) {
        if(isNotInPlane(vFacets[i]))
            sFacetsDil.insert(vFacets[i].id);
    }
}
Plane.sFacets.insert(sFacetsDil.begin(), sFacetsDil.end());

我为侵蚀步骤做了大致相同的事情。然而,这是非常无效的:一些方面在飞机内部,并且不必为了扩张步骤而被访问。我知道我可以计算飞机的边界,但我认为最终它会在迭代所有方面结束以找到它...而且,在某些情况下,我想做多个扩张步骤。所以每次都必须计算边界。

我有网格的标准halfedge结构。

有谁知道这个问题是否有标准算法?

0 个答案:

没有答案