我正在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结构。
有谁知道这个问题是否有标准算法?