查找一组点是否是彼此的镜像

时间:2015-10-13 16:31:31

标签: algorithm

我想知道这个问题的最佳算法是什么?给定一组点,确定它们是否沿着与y轴平行的线形成镜像。例如。给定(1,3) (3,3) (5,3) (7,3) (0,7) (8,7) (-1,4) (9,4),它们沿着x = 4

行形成镜像
(1,3) | (7,3)
(3,3) | (5,3)
(0,7) | (8,7)
(-1,4)| (9,4)

我认为最好的方法是将点放在HashMap中,其中键为y坐标,值为x坐标。遍历键集并确保每个键具有偶数个值并且还取其平均值。所有的平均值应该相同吗?

2 个答案:

答案 0 :(得分:3)

我会这样做:

  1. 找到最左边的一点。
  2. 找到最合适的一点。
  3. 假设这些点形成镜像。反射轴必须正好在最左边和最右边的点之间。
  4. 通过积分迭代。在可能的反射轴上反射每一个。如果任何反射点不在点集合中,则集合不会与自身形成镜像。如果所有反射点都在点集合中,则集合确实形成镜像。
  5. 示例Python实现:

    current = TestCameraFragment.newInstance(false);
    

答案 1 :(得分:0)

除非镜像线上的一个点被认为是自身的镜像,否则如果点数是奇数,则没有镜像线。

要查找镜像线:

方法1:迭代这些点并将它们的x值相加。完成迭代后,将总和除以点数。这是你潜在镜像线的x。我们称之为x mirror

方法2:从所有点中查找x min 和x max 值。平均x min 和x max ,这是你潜在的镜像线。

测试点是否确实由镜像线反射:

从最左边的点开始,每个(x i ,y i ):

  • 如果x i 等于x mirror 则继续,
  • 否则看输入中是否存在((x i + x mirror ),y i )。

您必须仅为 n / 2 点执行此操作。