如何获得voronoi细胞周围的点数?

时间:2013-05-28 16:23:51

标签: c++ algorithm polygon voronoi

我试图获得形成多边形的点以用一些颜色填充它。我有一组点,然后我为它计算Voronoi图。结果如下:

Voronoi Diagram

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

我已阅读过有关Gift Wrapping AlgorithmConvex Hull的内容,但似乎并非我需要的内容。有没有适合这种需求的算法?我使用C ++编程,但Java或C#中的任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

礼品包装算法(它是一种凸包算法)用于查找包含平面中一组点的最小凸多边形。那不是你想要的。

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

答案 1 :(得分:0)

您对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的反面)来迭代一个面。