查找多边形的最内部路径

给定一个由顶点组成的无向图,我需要找到连接两个特定点的最内部路径。我的最初想法是使用类似Dijkstra算法的东西来找到最短路径,但是有很多情况下最短路径不是最内部的。这是我想要实现的效果的可视化图像:

1

最终,我想要基于程序中绘制的墙壁生成“房间”。因此,图像中的虚线是我正在绘制的最终边缘,然后应该从顶点1到顶点7找到边缘路径(遮盖虚线),这将给我路径1-2-3-4-5-6-7。如果我现在使用的解决方案,最短路径将是1-2-8-6-7,但很明显,这不是最内部路径。

我努力进行了广泛的研究,但似乎找不到答案。我还尝试在每个节点处选择最低的边角度以遍历,但这只能用于单向旅行,因为我当前无法确定它是沿着节点顺时针还是逆时针遍历。值得注意的是,我正在尝试在Lua中完成此操作,但伪代码或类似的高级语言也将不胜感激!

让我知道我是否需要澄清任何事情。

点赞
用户2144669
用户2144669

基本上,您想要列举平面直线图面上的一条边相邻的边。

首先,您需要一个嵌入:对于每个节点,在某个逆时针顺序下将进入它的边进行排序,例如,5→6,8→6,12→6,7→6。(如果您喜欢,可以使用余弦定理避免三角函数。)然后在一个大的映射中存储后继节点:(5→6):(8→6),(8→6):(12→6),(12→6):(7→6),(7→6):(5→6),(1→7):(6→7)等等。

其次,要找到定向边右侧的面,需按逆时针顺序反复找到下一个定向边并翻转它,直到回到起始边。例如,1→7,6→7,7→6,5→6,6→5,4→5,5→4,3→4,4→3,2→3,3→2,1→2,2→1,7→1,1→7。

现在这里有一个小的麻烦:如果您从7→1开始,您将循环绕着无限面:7→1,10→1,1→10,9→10等等。解决这个问题的方法是计算面积的符号。如果为负,则我们很好,因为我们按顺时针顺序枚举有限面。如果为正,则我们需要另一个面,因为我们按逆时针顺序枚举无限面。

如果两个相邻面都是有限的,您需要告诉我您想要什么。

2021-03-11 12:31:38