检查点是不是位于球的边界/检查 Delaunay 三角剖分的唯一性
Posted
技术标签:
【中文标题】检查点是不是位于球的边界/检查 Delaunay 三角剖分的唯一性【英文标题】:Check if points lie on boundary of ball / check uniqueness of a Delaunay triangulation检查点是否位于球的边界/检查 Delaunay 三角剖分的唯一性 【发布时间】:2022-01-17 02:03:10 【问题描述】:Wikipedia article 关于 d 维中的 Delaunay 三角剖分状态是三角剖分唯一性的先决条件:
如果 P 是一般位置的一组点,则已知 P 存在唯一的 Delaunay 三角剖分;也就是说,P 的仿射壳是 d 维的,并且 P 中没有任何 d + 2 个点的集合位于内部不与 P 相交的球的边界上。
现在我已经编写了自己的 Delaunay 库,我希望能够根据点来验证三角剖分的唯一性。通过计算集合的秩可以很容易地检查仿射壳的维数。然而,第二部分要困难得多。
如何检查 d+2 个点是否位于不与集合相交的球的边界上,并且每个点上都没有一些巨大的循环?或者是否有另一种检查唯一性的方法?
我将 Python 与 Numpy 一起使用,但这更多是一个理论问题,因此语言无关紧要。 谢谢!
【问题讨论】:
【参考方案1】:您有已经是 Delaunay 三角剖分,即外接球内没有点。现在,例如,对于 2D 情况,只需检查是否可以翻转任何边缘,使其仍然是 Delaunay 三角剖分。如果没有,你有一个独特的解决方案。请注意双精度算术的舍入误差。
【讨论】:
【参考方案2】:对于三角剖分的最大维度的每个 单纯形,使用 d+1
点,您有 d+1
相邻单纯形。两个相邻单纯形共享d
点(自己形成单纯形)。由于我不知道您是否熟悉维度 d
中的工作,让我们来看看维度 2 和 3...
无论如何,给定维度 d
中的 Delaunay 三角剖分,如果您想检查是否有唯一的三角剖分,请迭代维度 d-1
(3D 中的三角形或 2D 中的边)的单纯形,并获取两个事件单纯形(3D 中的两个相邻四面体,或 2D 中的相邻三角形)。这会给你d+2
点。由于三角剖分是 Delaunay,您知道那些 d+2
点的 in_sphere
谓词的结果为正或空。如果在对维度 d
的单纯形进行迭代期间,d+2
点的所有 in_sphere
谓词的结果都是严格正数,那么您的三角剖分是唯一的,否则它是退化的且非唯一的。
看看 Olivier Devlers 和 Sylvain Pion 的论文 Efficient Exact Geometric Predicates for Delaunay Triangulations:引言给出了 Delaunay 三角剖分理论的基础知识,以及 in_sphere
谓词。它还提供了以精确但有效的方式实现orientation
和in_sphere
谓词的线索。这可能有助于您实施 Delaunay 三角测量。
【讨论】:
感谢您的建议和有趣的论文。最初我希望有一些方法可以在没有三角测量的情况下确定唯一性,但似乎我会实施这个解决方案。谢谢!以上是关于检查点是不是位于球的边界/检查 Delaunay 三角剖分的唯一性的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:检查两个地理/几何的边界是不是相互交汇
从 Delaunay 三角剖分计算 alpha 形状的边界多边形