在几何学和图论中,一个顶点的2-ring(或称为2-邻域)是指与该顶点直接相连的一圈顶点,以及与这些直接相连的顶点再直接相连的一圈顶点。换句话说,2-ring包括了目标顶点的直接邻居(1-ring)和这些直接邻居的直接邻居。
1-ring:直接与目标顶点相连的顶点。
2-ring:与1-ring中的顶点相连,但不包括目标顶点本身的顶点。
K-ring:以此类推...
使用递归的方法,实现CGAL中K-邻域顶点查找,代码如下:
std::set<Mesh::Vertex_index> find_k_ring(const Mesh &mesh, Mesh::Vertex_index v, int k)
{
if(k = 1)
{
std::set<Mesh::Vertex_index> one_ring;
for (auto h : CGAL::halfedges_around_target(mesh.halfedge(v), mesh))
{
one_ring.insert(mesh.source(h));
}
return one_ring;
}
auto pre = find_k_ring(mesh, v, k - 1);
std::set<Mesh::Vertex_index> result = pre;
for (auto neighbor : pre)
{
std::set<Mesh::Vertex_index> neighbor_one_ring = find_k_ring(mesh, neighbor, 1);
result.insert(neighbor_one_ring.begin(), neighbor_one_ring.end());
}
return result;
}