使用CGAL将多面体投影到xy平面

时间:2018-05-22 12:36:35

标签: c++ 3d geometry computational-geometry cgal

我正在努力计算多面体在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));

这会迭代多面体表面,并且每个表面都会手动执行2d投影。然后将生成的多边形连接在一起。

但是,从手册中我觉得这不是将库用于此类任务的预期方式。类Project_traits_xy_3提示,有一种常规的方法来实现CGAL的投影。但是,我找不到适当的文档或示例。

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

1 个答案:

答案 0 :(得分:1)

你正在寻找的是一个轮廓的计算,我们在CGAL中没有那个作为一个高级功能。 你的代码完成了这项工作。

如果您的物体是水密的,则只能拍摄向上指向正常的脸部。您还可以计算面向上的标注的连接组件,然后为这些组件的边界创建多边形。

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