检查多边形是否对称

Cha*_* Le 6 algorithm geometry symmetric polygon computational-geometry

给定笛卡尔坐标中的多边形(不是必要的凸面),我想知道是否有任何方法可以检查该多边形的对称性?

我可以想到一个O(N)解决方案:使用旋转卡尺检查每对相对边是否平行并且大小相等.但是,我无法证明该算法的正确性.你能建议更好的解决方案吗?

use*_*016 -1

  • 您计算多边形的重心。
  • 您将其平移到原点,以便您的重心坐标为 (0,0)。
  • 然后,对于坐标 (i, j) 的每个顶点,检查是否存在具有坐标 (-i, -j) 的顶点。

这将证明你的多边形确实是对称的。

复杂度:N,假设您可以从坐标直接访问顶点。

  • 这会检查多边形是否具有相同的顶点,但不能保证它们以相同的顺序连接。 (4认同)
  • 显然,并非每个三角形都是对称的。但是,例如,等边三角形具有三个反射对称性和三个旋转对称性,您的算法无法找到其中任何一个。 (4认同)
  • 如果多边形的一侧有一个点位于一条边上,而该点不会出现在具有相同边的多边形的另一侧上,该怎么办?所以 A 有点 (0,0),(0,1),(0,2),B 有边 (2,0),(2,2)。通过 x=2 的反射线,它们可能是相同的。您需要首先确保多边形没有无关的点...... (2认同)