鉴于CGAL三角剖分,我想在其凸包内找到整数坐标的所有点。
我知道我们可以遍历所有整数点,并按locate()
找到它们的位置。但这不会有效。有没有办法可以在凸包的三角形内找到点?这是在给定三角形内获得格点的有效方法(顶点都在格点上)吗?
答案 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算法直接生成四面体中具有整数坐标的点(它更容易出错并且难以实现以获得不那么惊人的速度增益,我实验了两者而且我现在使用第一个解决方案)。如果您的网格尺寸与四面体的尺寸相比非常小,则第二种解决方案会更好。