我想获取构成多边形的点,以便用一些颜色填充它。我有一组点,然后计算出其Voronoi图。结果如下:
我已经了解了Gift Wrapping Algorithm和Convex Hull,但似乎它们并不符合我的需求。有没有适合这种情况的算法?我正在使用C++进行编程,但任何关于Java或C#的帮助都会有所帮助。
我想获取构成多边形的点,以便用一些颜色填充它。我有一组点,然后计算出其Voronoi图。结果如下:
礼品包装算法(这是一个凸包算法)用于找到包含平面上一组点的最小凸多边形。但这不是你想要的。
Fortune's algorithm 是寻找 Voronoi 图的实际边界的好方法。它不是一个简单的算法,但在链接的维基百科页面上提供了完整的伪代码。在维基百科页面底部,有链接到几种不同语言的 Fortune 算法实现。
你的Fortune算法实现似乎计算了自然嵌入,可以用于提取面的边缘列表。这是关键的数据结构。
struct Halfedge
{
struct Halfedge *ELleft, *ELright;
struct Edge *ELedge;
int ELrefcnt;
char ELpm;
struct Site *vertex;
float ystar;
struct Halfedge *PQnext;
};
ELleft
和ELright
似乎是一个包含特定顶点或面的入射边缘的双向链表,按角度排序。 如果它是一个面,那么你很幸运;否则,你可以通过将半边e更新为其目标顶点周围逆(顺)时针顺序的下一半边的反转来在面周围迭代(即ELleft
的反转)。