我正在处理由二维网格上的方形瓷砖组成的多边形。一个多边形简单地存储为一个元组列表,每个元组代表一个图块的坐标。多边形始终是连续的并且没有孔。
我想要做的是确定哪些图块代表多边形边界的顶点,以便稍后我可以在每个图块之间进行追踪以生成多边形的边界,或者确定两个连续顶点之间的距离以找到长度一方等
这是一个多边形示例(一个 5x4 矩形,左上角减去一个 3x2 矩形,产生一个向后的“L”):
polygon_tiles = [(3, 0), (4, 0), (3, 1), (4, 1), (0, 2), (1, 2), (2, 2), (3, 2),
(4, 2), (0, 3), (1, 3), (2, 3), (3, 3), (4, 3)]
理想情况下,我正在寻找的算法会产生如下所示的结果:
polygon_verts = [(3, 0), (4, 0), (4, 3), (0, 3), (0, 2), (3, 2)]
列出的顶点按顺时针方向跟踪边界。
只是摆弄一些测试用例,这个问题似乎比我想象的要复杂得多,特别是在奇怪的情况下,比如当多边形有 1 瓦宽的挤压时(在这种情况下,其中一个瓦片可能必须是存储为顶点两次??)。
我正在使用 Python,但任何见解都值得赞赏,即使它是伪代码。