获取CGAL三角剖分的凸包内的整数坐标的所有点

时间:2015-04-10 17:31:39

标签: cgal

鉴于CGAL三角剖分,我想在其凸包内找到整数坐标的所有点。

我知道我们可以遍历所有整数点,并按locate()找到它们的位置。但这不会有效。有没有办法可以在凸包的三角形内找到点?这是在给定三角形内获得格点的有效方法(顶点都在格点上)吗?

2 个答案:

答案 0 :(得分:0)

您可以迭代三角测量边界框内的所有整数点,并巧妙地使用locate()。对于locate()的查询,存储返回的单元格或面部句柄(我仍然不知道您的问题是关于2D还是3D三角测量)。然后,将该句柄用作hint函数的locate()参数。如果您的查询彼此接近,则连续的locate()将非常快地返回。

答案 1 :(得分:0)

一个简单的可能性是计算点的3D Delaunay三角剖分,然后对于Delaunay三角剖分中的每个有限四面体,迭代四面体边界框中的整数点,并拒绝四面体外的那些。测试点q是否属于四面体(p1,p2,p3,p4)可以通过测试四面体的每个面(i,j,k)的orient3d(q,pi,pj,pk)来完成。

稍微更高效的可能性使用Bresenham算法直接生成四面体中具有整数坐标的点(它更容易出错并且难以实现以获得不那么惊人的速度增益,我实验了两者而且我现在使用第一个解决方案)。如果您的网格尺寸与四面体的尺寸相比非常小,则第二种解决方案会更好。