代码之家  ›  专栏  ›  技术社区  ›  Ctx

用cgal投影到xy平面的多面体

  •  0
  • Ctx  · 技术社区  · 6 年前

    我正在努力计算多面体在xy平面上的投影。目前我使用以下代码:

    vector<Polygon_2> ii;
    vector<Polygon_with_holes_2> oi;
    for (Facet_iterator s = polyhedron.facets_begin();
                                s != polyhedron.facets_end(); ++s) {
        Halfedge_facet_circulator h = s->facet_begin(), he(h);
    
        Polygon_2 polygon;
        do {
            Point p1 = h->vertex()->point();
            polygon.insert(polygon.vertices_end(), Point_2(p1.x(), p1.y()));
        } while (++h != he);
        if (polygon.orientation() == CGAL::NEGATIVE)
            polygon.reverse_orientation();
        ii.push_back(polygon);
    }
    CGAL::join(ii.begin(), ii.end(), std::back_inserter(oi));
    

    这将迭代多面体曲面,并为每个曲面手动执行二维投影。然后将生成的多边形连接在一起。

    但是,从手册中我觉得这不是使用库来完成这项任务的预期方式。班级 Project_traits_xy_3 提示,有一个常规的方法来实现CGAL的投影。但是,我找不到合适的文档或示例。

    有人能给我指个方向吗?我觉得,这应该是一个标准的任务,有一个优雅的方式。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andreas Fabri    6 年前

    你要找的是一个轮廓的计算,我们在cgal中没有这个高阶函数。 你的代码完成了任务。

    如果你的物体是水密的,你可以只取有法向上的面。您还可以使用向上的normls计算面的连接组件,然后为这些组件的边界创建多边形。

    投影特征类用于将三维点解释为二维点,例如构造二维约束的Delaunay三角剖分,但我不知道它在哪里可以派上用场。