使用 CGAL 将多面体投影到 xy 平面
Polyhedron projection to xy plane with 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 实现投影。但是,我找不到合适的文档或示例。
谁能在这里指出我正确的方向?我觉得,这应该是一个优雅的标准任务。
您正在寻找的是轮廓的计算,我们在 CGAL 中没有将其作为高级函数。 您的代码可以完成这项工作。
如果你的对象是水密的,你可以只取法线朝上的面。 您还可以计算面的连接分量,其中 normls 指向上方,然后为此类分量的边界创建多边形。
投影特征类用于将 3D 点解释为 2D 点,例如构造 2D 约束 Delaunay 三角测量,但我看不出它在这里可以派上用场。
相关文章:
- 在 cpp 中的平面缓冲区中序列化对象
- 将平面阵列重塑为复杂的特征类型
- 未在此范围内声明错误 'xy'
- CGAL:在浏览平面地图时使用类型"标记"
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 如何找到两个棋盘平面之间的角度?
- 平面和球体光线追踪之间的交点
- 从矢量数组制作平面文件
- 从 TS 到C++的平面缓冲区不起作用
- 如何在C++中加快平面到打包/交错图形的速度?
- 从一组点C++平面插值
- 使用(非对象)API 时改变表数组C++而不重新创建整个平面缓冲区
- 使用createHillPlaneMesh处理地板平面
- 使用 CGAL 将多面体投影到 xy 平面
- 将嵌套的 std::arrays 视为具有链式 .data() 的单个平面数组
- 如何从平面缓冲区中反序列化联合结构的 void* 值的大小
- 使用平面缓冲区读取以前写入的二进制文件的数据
- D3DXPLANENERAMALAGE仅返回归一化平面或对其进行修改
- 替代gl_texcoord.xy获得纹理坐标