Delaunay三角剖分-合并时获得第一优势

时间:2018-08-16 23:12:02

标签: algorithm geometry delaunay

我正在尝试为发现here的Delaunay Triangulation实施分而治之算法,但是遇到了问题。合并两个集合时,我应该找到它们之间的最底端边缘,该边缘不与图中已经存在的任何边缘相交。

我的第一个问题是,最底层根本没有定义,也不是很明显。我读过很多文字,例如,可以安全地使用两组中y值最低的顶点之间的边缘,但事实并非如此,如该图所示: enter image description here

我很确定,至少这些要点之一必须是该优势的一部分,但是我还是无法证明这一点。

我不想对照图表检查每一对边,因为对于较大的数据集,这可能会花费太长时间。

所以我正在寻找一种找到该基本边缘的方法。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我很确定,我只是想通了。在获得具有最低y值的顶点之后,我浏览了这两个集合并寻找了两个顶点,它们位于由先前选择的顶点形成的线(或其上)下方,并且与该顶点之间的距离最大。如果两个点之间的距离相等,则在左边的情况下,我选择x值最大的一个,在右边的情况下,我选择最小的x值。

这似乎效果很好。这是因为我注意到,为了发生相交,在该线下需要一个点,该点是与基本边相交的边的一部分。这样,我想我找到了与这两个集合相切的最低边缘,这意味着,如果我旋转该集合,则此线是水平的,则它下方将不存在任何点。

答案 1 :(得分:0)

我最终得到了以下算法:

  1. 使用Andrew's monotone chain algorithm构建凸包。
  2. 获取凸包的边缘,这些边缘不在子三角凸包中。
  3. 获得的最低边缘是必需的基础边缘。

关于第三步的注意事项:如果S1的方向(其端点按S2坐标升序排列),则将段S2认为在另一个段x之下。 S1的两个端点都不是逆时针方向的,即如果我们在S1上移动,则S2永远不会在S2的左侧。

example of case when segment S2 is above segment S1

时间复杂度注释

  1. 因为在D&C算法的开始,我们先按x依次对点进行排序,然后再按y进行分类,所以建立子三角凸包的方式将是O(n)(不进行排序)需要),其中n是两个子三角图中的点数。
  2. 我们可以使用具有O(1)个子三角形边缘查找功能的容器(例如哈希表),并在O(n)中进行过滤。
  3. 搜索最低边缘可以在O(n)中完成。

因此整个过程将需要进行O(n)个操作。