CGAL的Surface_mesh中K-邻域(K-ring)顶点查找

       在几何学和图论中,一个顶点的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;
}

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值