2

我有它们之间的节点和线列表,它看起来像这样:

地图

我需要的是生成块,在这种情况下它会是这样的:block1:1,2,14,11 block2:2,13,12,14 block3:2,3,4,5,6,12,13块 4:6、7、12 等...

有人知道如何为此创建算法吗?谢谢

4

2 回答 2

2

您可以首先将每个节点的边按顺时针顺序排序。(例如,基于键 atan2(dy,dx) 排序,其中 dx,dy 是沿边缘的向量。)

然后以每条边(以及沿边的两个方向)为起点,沿着块逆时针方向移动。

要逆时针跟随,您会在目标节点的排序列表中找到传入边,然后沿着列表中的下一条边退出。

例如,如果您从边 11->14 开始,那么当您到达节点 14 时,您将知道接下来要采用边 14->2(因为节点 14 的边将按顺时针顺序 14->12 , 14->11, 14->2)。当您到达起始节点时,您已经确定了一个块。

您可以在跟随它们时将边缘标记为已使用,以避免两次生成相同的块。(如果起始边已被标记为在该方向上使用,则跳过起始边。)

这也将生成一个由背景区域组成的块 0。

于 2013-02-24T22:25:17.580 回答
-1

在我看来,您正在尝试生成平面图的对偶。

http://en.wikipedia.org/wiki/Dual_graph

可能是一个很好的起点。

于 2013-02-28T09:46:10.333 回答