由正方形网格组成的多边形

pig*_*sus 7 algorithm polygon computational-geometry graph-algorithm

我正在寻找一种算法来查找围绕连续的没有孔的正方形网格的多边形,如下所示:

问题说明

我已经让每个网格方块存储有关它们所组成的周围区域的边缘类型的数据(即顶部、右上角、顶部底部、无边缘等),所以我认为这数据可以被算法利用。如果有人能为这种算法提供一些伪代码,那就太好了。

算法的输入将是一个数据对象列表,每个数据对象都有一个描述网格位置的 Vector2Int(请注意,这些只是网格内的位置,而不是顶点)以及给出正方形所具有的边类型的 Enum与周边地区。输出将是描述周围多边形顶点的 Vector2 的有序列表,假设每个网格正方形的大小都是一个单位。

我在下面的链接中发现了类似的问题,但我想对特定于我的情况的算法进行一些详细说明,特别是考虑到我已经存储的有关边缘的数据。我还希望该算法避免计算每个正方形的顶点并运行一堆简单的搜索来消除共享的顶点,因为我觉得这对于我的特定应用程序来说计算成本可能太高。我只是怀疑必须有更好的方法。

从等正方形构造的几何体中提取轮廓(周长)多边形

编辑:现在我开始认为某种迷宫行走算法实际上可能适合我的情况。我正在研究一个我认为可行的解决方案,但编写起来非常麻烦(涉及对方形边缘和圆周行进方向的大量条件检查)并且可能没有那么快。

小智 2

我不确定您的数据结构包含什么,并且我假设您有一个由某个点(角或中心)的坐标已知的正方形列表。

计算边界框并创建相同大小的二进制位图。除非几何图形非常稀疏,否则位图的面积将与正方形的数量具有相同的数量级。

对于每个正方形,将相应的像素涂成黑色。然后使用轮廓算法。为了获得方块的轮廓,您需要设计像素到像素的移动和要附加的轮廓片段之间的对应表。