如何找到由正方形组成的多边形的角点?

How to find corner points of a polygon composed of squares?

一组相邻的正方形组成一个多边形,正方形的4个顶点坐标已知,但正方形的顺序未知

在示例图像中,我用红点突出了所有角点。如果按正确的顺序连接它们,就可以像在正确的位置放置方块一样恢复完整的形状。

那么问题来了,如何找到红点,以及它们的顺序?

也许还有一个问题是如果这个形状有一些洞怎么办?

  1. 计算输入中每​​个顶点出现的次数。出现奇数次的是你的“角落”。将这些顶点标记为“角”。

  2. 计算每条边在您的输入中出现了多少次。只出现一次的边是你的“外边”,将它们标记为外边(出现两次的边是内边,我们不关心它们)。

  3. 随机选择一个有一个或多个未使用外缘的“角”,沿着它的一个外缘直线(即保持相同方向)穿过“偶数”顶点,直到到达另一个角(奇数顶点)。

  4. 从新角继续,只使用以前未使用过的直边。当您 return 到达起始角时,您已经完成了该(半?-)连接形状的角列表。

  5. 如果仍有未使用外边的角,则随机选择其中一个并转到步骤#3。重复此步骤,直到所有角的外边缘都被考虑在内。