有没有人知道检查两组多边形之间的一致性的算法?更具体地说,请参见下图。
我正在寻找一种方法来检查一组给定的彩色三角形是否与另一组完全一致,即是否可以叠加通过多个平移,旋转或反射的给定集合(例如蓝色三角形)在另一组(例如红色三角形)。在上面的示例中,所有3组三角形(蓝色,红色和绿色)都是一致的。
我正在处理的实际三角形大于此并且有更多集合。
我用Google搜索并找到this paper,但它涉及三维多边形,并且不是直接(在我看来)可实现的。
欢迎任何建设性的想法或链接。
修改
为了澄清,每组三角形必须被视为整个连接的图形,即该组中的每个三角形相对于该组中的其他三角形固定在其中。
另外,我只需要一种算法,可以确定一组三角形是否与另一组完全一致,但是三角形比上面的三角形大得多,还有更多的三角形。想象一个边长为N且总共有N ^ 2个较小三角形的三角形,分为N个不同颜色的N个三角形组。
答案 0 :(得分:2)
旋转和反射的组合可以通过旋转和最多一次反射来表示,因此如果您运行仅旋转算法两次,一次使用原始图形,一次使用反射图形,则可以忽略反射。
三角形的重心(或者,更容易的是,仅在三角形的顶点处具有质量的图形的重心)不受旋转的影响,因此我将首先计算重心每个人物。现在用一个列表来表示图形,给出图中每个点与其重心的方向和距离。
如果距离设置不同,则数字不能相互旋转,我猜大多数非同一性将在此阶段被发现。对于总成本N ^ 2,您可以考虑将一个图形中的顶点旋转到另一个图形的每个可能顶点,然后将此计算的旋转应用于所有其他顶点并查看它们是否匹配。可能会使用某些版本的https://en.wikipedia.org/wiki/Lexicographically_minimal_string_rotation来加快速度。在将它们按顺序排序后,通过顶点方向之间的角度来表示方向可能会有所帮助。