【问题标题】:Get all points with integer coordinates inside the convex hull of a CGAL triangulation获取 CGAL 三角剖分凸包内具有整数坐标的所有点
【发布时间】:2015-06-16 12:36:08
【问题描述】:

给定一个 CGAL 三角剖分,我想在其凸包内找到所有具有整数坐标的点。

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

【问题讨论】:

  • 我的意思是“三角内的点”是指不在无限面上的点。
  • 是的,我就是这个意思。
  • 你的问题一点都不清楚。你的输入是什么,期望的输出是什么?
  • 我希望输入是一个带有给定顶点坐标的三角形,并输出其中的格点。
  • 是2D还是3D?

标签: cgal


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多