C++ 用CGAL将多面体投影到xy平面

C++ 用CGAL将多面体投影到xy平面,c++,3d,geometry,computational-geometry,cgal,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-

我正在努力计算多面体在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));
vectorⅡ;
载体oi;
for(Facet_迭代器s=多面体。facets_begin();
s!=多面体。面_end();++s){
半边切面切面切面循环器h=s->切面切面切面开始(),he(h);
多边形2多边形;
做{
点p1=h->顶点()->点();
插入(polygon.vertices_end(),Point_2(p1.x(),p1.y());
}而(++h!=he);
if(polygon.orientation()==CGAL::NEGATIVE)
多边形。反转方向();
ii.推回(多边形);
}
CGAL::join(ii.begin()、ii.end()、std::back_插入器(oi));
这将在多面体曲面上迭代,并为每个曲面手动执行二维投影。然后将生成的多边形连接在一起

然而,从手册中,我觉得这不是使用库执行此类任务的预期方式。类
Project\u traits\u xy\u 3
提示,有一种常规方法可以使用CGAL实现投影。然而,我找不到合适的文档或示例


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

你要找的是一个轮廓的计算,我们在CGAL中没有作为高级函数的。 你的代码完成了这项工作

如果对象是水密的,则只能获取法线指向上方的面。还可以计算法线朝上的面的连接组件,然后为这些组件的边界创建多边形


projection traits类用于将3D点解释为2D点,例如用于构建2D约束Delaunay三角剖分,但我不认为它在这里可以派上用场。

您需要的是轮廓的计算,而CGAL中没有将其作为高级函数。 你的代码完成了这项工作

如果对象是水密的,则只能获取法线指向上方的面。还可以计算法线朝上的面的连接组件,然后为这些组件的边界创建多边形


projection traits类用于将3D点解释为2D点,例如用于构建2D约束Delaunay三角剖分,但我不认为它在这里能派上用场。

好的,很有趣。。。是的,当然,从某个角度(三角形化)多面体曲面的渲染-本质上是在任意定向平面上的投影-通常由其他组件(图形卡/GPU)来完成,但我不知怎的认为,CGAL也有这方面的功能。看来我错了,我会坚持我现在的代码。谢谢你的回答!好的,很有趣。。。是的,当然,从某个角度(三角形化)多面体曲面的渲染-本质上是在任意定向平面上的投影-通常由其他组件(图形卡/GPU)来完成,但我不知怎的认为,CGAL也有这方面的功能。看来我错了,我会坚持我现在的代码。谢谢你的回答!