检查多边形是否对称

时间:2011-05-04 09:01:44

标签: algorithm geometry polygon computational-geometry symmetric

给出笛卡尔坐标中的多边形(不是必要的凸),我想知道是否有办法检查该多边形的对称性?

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

你必须更清楚地说明允许什么样的对称性。中心对称(也就是180度旋转)?镜像对称于其中一个轴?任何程度的轮换?在某些应用程序中,只允许通过0,90,180,270 +镜像旋转......在每种情况下答案都会有所不同。

仅对于中心对称,如果假设多边形是很好的代表(即边缘上没有额外的顶点,并且顶点保持在包含前向运算符的顶点中),则中心对称多边形将具有偶数2 * N个调整,你可以这样做:

  1. 将iter1引用设置为第0个顶点,将iter2设置为引用第N个顶点。

  2. 重复N次:

    if(* iter1!= * iter2)返回false;

  3. return true;

答案 2 :(得分:0)

首先需要定义要检查的对称类型(多边形应该不变的转换)。您提供的算法将检查凸多边形的中心对称性(因为旋转卡尺仅适用于凸多边形)。