【问题标题】:Triangulating a planar point set with known Boundary对具有已知边界的平面点集进行三角剖分
【发布时间】:2013-10-04 00:13:11
【问题描述】:

我有一个平面点集 P。我已经知道 P 中的哪些点 p 属于边界 B(p)。所述边界可以是凸的或非凸的。现在,我想找到边界为 B(p) 的 P 的三角剖分。我的问题:

  • 是否有直接实现此目的的算法?一个接近的候选者将是约束德劳内三角剖分(CDT)。但是,我认为 CDT 不适用于此处:我可以将 B(p) 中的所有边作为约束提供,这样所有边都将包含在三角剖分中。然而,这并不一定意味着这将是三角剖分的边界。如果我在这里错了,请纠正我。

  • 如果你现在有这样的算法,你能给我指出一个提供实现的(轻量级)C 库吗?

  • 或者:我当然可以使用 GTS 的标准 Delaunay 三角剖分对 P 进行三角剖分。然后我需要用 B(p) 之外的顶点修剪所有面。 GTS 可以做到这一点吗?

【问题讨论】:

  • 你知道边界上点的顺序吗?边界简单吗?
  • 如果简单意味着不相交,那么是和是

标签: c algorithm triangulation


【解决方案1】:

poly2tri 找到给定边界的平面区域的 CDT。它易于构建和使用。

【讨论】:

    【解决方案2】:

    您需要先使用边界点做Ear Clipping,然后将结果传输到Delaunay三角剖分并添加内部点。

    【讨论】:

      【解决方案3】:

      我可以将 B(p) 中的所有边作为约束提供,这样所有边都将包含在三角剖分中。但是,这并不一定意味着这将是三角剖分的边界。

      您说得对,受约束的 Delaunay 三角剖分可能会填充边界的凹面。然而,每个三角形要么完全在边界内,要么完全在边界外,因此很容易通过从无限面开始遍历平面直线图的对偶来删除边界外的三角形,将边界边缘视为不可通过。例如,Jonathan Shewchuk 的图书馆Triangle 就是这样做的。许可证可能不符合您的喜好,但如果您已经有另一个库来计算受限的 Delaunay 三角剖分,我们并不是在谈论很多额外的代码。

      【讨论】:

      • 感谢您的宝贵意见。我想在您的回答中添加 gts_remove_hull() 完全实现了您所描述的程序最后一步(删除边界外的三角形)
      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多