【问题标题】:Why do the delaunay edges from Matlab's delaunayn() connect points with non-adjacent Voronoi regions?为什么 Matlab 的 delaunay() 中的 delaunay 边将点与不相邻的 Voronoi 区域连接起来?
【发布时间】:2012-01-05 09:47:15
【问题描述】:

我试图在给定的数据集中找到边缘相邻的 Voronoi 区域的点。我是计算几何的新手,但从网上阅读来看,使用 Delaunay 镶嵌似乎是一种简单的方法。 This PDF 甚至有一个引理指出

引理 2.4 S 的两个点由一条 Delaunay 边连接当且仅当它们的 Voronoi 区域 边缘相邻。

所以,我发现我的数据集的 delaunay 细分为

dt = delaunay(dataset); %using delaunayn() since dataset can be multidimensional

但是现在,当我将此与该数据集的 voronoi 图一起绘制时,我发现 delaunay 边返回的连接点的区域实际上并不相邻。

这是我用来将 Voronoi 和 Delaunay 绘制在一起的代码:

voronoi(dataset(:, 1),dataset(:, 2));
hold on;

dt = delaunayn(dataset);
triplot(dt, dataset(:, 1), dataset(:, 2), 'red');

这是输出:

作为问题的一个例子,看图右端的X点连接到左下角附近的Y点。

另一个例子是在this SO question - 点 1 连接到 2 和 3,即使它们不相邻,并且似乎没有任何方式 1 和 2 可以共享一条边,即使延伸到无穷。这个问题实际上是促使我用上面的代码测试 delaunayn 输出的原因。

为什么会发生这种情况,我如何才能真正获得我需要的边缘相邻区域?

注意:要查看完整尺寸和清晰度的图像,请右键单击并选择“查看图像”或类似选项。

【问题讨论】:

  • 感谢您以全尺寸查看图像的提示,不知道它被按比例缩小(顺便说一句,过滤不好,至少在 Firefox 中)。

标签: matlab delaunay voronoi


【解决方案1】:

据我所见(图表的质量不太好),X 和 Y 的区域应该在绘图部分下方相邻。如果你缩小得足够远,你应该会看到它们。

即X 和 Y 相交的边是存在的,只是图中没有显示。

下图不是显示了绘图区域之外的voronoi图,而是如何找到上面描述的交点(注意,这里没有显示平分线):

【讨论】:

  • 如果你看一下水平轴,Voronoi 图的边缘有四个交点。我非常有信心外部的(大约在 37 和 82 处)将与笛卡尔平面相交。交点将位于 X 和 Y 的垂直平分线上,链接问题中的图表也是如此(尽管它位于右侧)。你缩小图表了吗?
  • 非常感谢安德烈。我首先认为链接问题中的区域 1 和 2 不可能共享边缘,但我使用 Matlab 的图像处理工具箱分析了图像,发现它们的斜率意味着它们确实相交!我猜这个问题本身,严格来说,它的假设是错误的。这是一个沉重的负担,再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2021-11-23
  • 1970-01-01
  • 2021-12-26
  • 2016-08-04
相关资源
最近更新 更多