【问题标题】:How to get the points around a voronoi cell?如何获得 voronoi 单元周围的点?
【发布时间】:2013-05-23 17:06:27
【问题描述】:

我正在尝试获取形成多边形的点以用某种颜色填充它。我有一组点,然后我为它计算 Voronoi 图。结果是这样的:

绿点是我定义的点,蓝点是 Voronoi 图的计算顶点。我想填充由特定绿点生成的多边形,所以我需要知道它周围的哪些点来形成多边形并填充它。

我已经阅读了有关Gift Wrapping AlgorithmConvex Hull 的信息,但这似乎不是我所需要的。有没有适合这种需求的算法?我正在使用 C++ 编程,但对 Java 或 C# 的任何帮助都会有所帮助。

【问题讨论】:

  • Matlab voronoi(x,y) 函数为您提供所需的全部信息。
  • 我是用 C++ 做的,所以 Matlab 不是替代品,我需要在我的程序中编写算法
  • C++调用matlab(通过COM)是没问题的,关键是要不要潜入黑匣子。
  • 有独立于平台的C++独立库吗?因为那时我将分发我的程序,我不能到处安装 Matlab。我对Matlab不太了解,所以我问。
  • 如果你想将它部署到其他PC,这不再是一个选择。虽然可行,但很麻烦,会消耗你很多时间。离开吧。

标签: c++ algorithm polygon voronoi


【解决方案1】:

Gift Wrapping 算法(这是一种凸包算法)用于查找包含平面中一组点的最小凸多边形。这不是你想要的。

Fortune's algorithm 是查找 Voronoi 图实际边界的好方法。这不是一个简单的算法,但链接的维基百科页面上提供了完整的伪代码。在 Wikipedia 页面的底部,有几个不同语言实现 Fortune 算法的链接。

【讨论】:

  • @Ph.T 我的答案中已经有了这个链接。你没看到吗?
  • 抱歉 timothy 现在才看到,我没有点击链接表示诚意.. 干得好
  • @Ph.T 哈哈没问题 - 我只是很困惑为什么你用相同的确切链接发表评论。 :)
  • 我使用的算法是财富算法,它生成我上传的图像,但它给了我多边形的点,但我不知道它与哪个站点相关联,这就是我需要的。我已经搜索了该算法,因为实现起来有点复杂,或者我无法完全理解它:/
【解决方案2】:

您的 Fortune 算法实现似乎可以计算自然嵌入,可用于提取人脸的边缘列表。这是关键的数据结构。

struct Halfedge 
{
    struct  Halfedge    *ELleft, *ELright;
    struct  Edge    *ELedge;
    int     ELrefcnt;
    char    ELpm;
    struct  Site    *vertex;
    float   ystar;
    struct  Halfedge *PQnext;
};

ELleftELright 似乎是一个双向链表,其中包含与特定顶点或面相关的边,按角度排序。如果是一张脸,你是金色的;否则,您可以通过将半边 e 更新为下一个半边的反向(逆时针)围绕其目标顶点(即 ELleft 的反向)来围绕面进行迭代。

【讨论】:

猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多