【问题标题】:Polyhedron projection to xy plane with CGAL使用 CGAL 将多面体投影到 xy 平面
【发布时间】:2018-05-22 12:36:34
【问题描述】:

我正在努力计算多面体在 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 实现投影。但是,我找不到合适的文档或示例。

任何人都可以在这里指出我正确的方向吗?我觉得,这应该是一个优雅的标准任务。

【问题讨论】:

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


    【解决方案1】:

    您正在寻找的是轮廓的计算,我们在 CGAL 中没有将其作为高级函数。 您的代码完成了这项工作。

    如果你的对象是防水的,你可以只取法线向上的面。您还可以计算法线向上的面的连通分量,然后为这些分量的边界创建多边形。

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

    【讨论】:

    • 好吧,有趣...是的,当然,从某个视点渲染(三角化)多面体表面——本质上是在任意方向平面上的投影——通常由其他组件完成(显卡/GPU)无论如何,但我不知何故认为,CGAL 也有这方面的功能。好像我错了,我会坚持我现在的代码。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2019-11-10
    • 2011-04-10
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多