我想在2D空间中生成随机点,这些点将是平面图的节点(使用Gabriel graph算法或RNG构建)。
我编写了java代码来执行此操作,但我有两个难以解决的问题。
1)我需要图的所有边都不长于给定的阈值
2)在我想知道图形的面后,面是由边连接的节点的集合。一个面不包含其他节点。在下面的图像中,面部由标签(F1,F2 ...)
签名如何做这两件事?一些算法?有一些方法已经知道吗?
下面是我必须创建的图表示例
答案 0 :(得分:1)
如果您可以容忍点数的某些变化,那么您可以将Gabriel图算法修改为增量(大部分工作将使您的Delaunay算法增量)然后每当边缘太长时,在该边缘作为直径的圆圈中插入一个随机点。
平面图最方便的数据结构是以边缘为中心的:例如,doubly-connected edge list和quad-edge表示。如果你还没有在Delaunay步骤中使用这种类型的数据结构(我无法想象你为什么不这样做),你可以按角度对每个顶点的传出连接进行排序。从那里,很容易实现一个半边的功能,并以逆时针顺序返回同一面上的下一个半边。现在遍历所有的半边,并且对于每个尚未访问的半边,迭代面部,直到返回到您开始的位置。将内部迭代中的所有半边标记为一个面。