弄清楚同一行上的相邻点

时间:2017-10-25 09:33:16

标签: algorithm computational-geometry

给定同一行上的点列表,我需要找出每个点的相邻点。 See the image for illustration

我知道所有点的坐标。这些点在我的输入列表中随机排序。

我的方法:

  1. 选择列表中的第一个点。找到从这一点到所有点的向量。
  2. 对于每个矢量,找到逆时针角度。
  3. 只有两个角度(a1,a2)可能。形成所有具有角度a1的点的列表,以及具有角度a2的点的列表。
  4. 现在查看每个列表,找出欧氏距离/矢量长度。
  5. 按升序对此列表进行排序,可用于建立相对排序。
  6. 例如:如果p2恰好是列表中的第一个点,则假设较小的角度为30,则较大的顺时针角度为210。 所以,p1将位于一个列表中。 p3,p4,p2将位于另一个列表中。现在我可以获得积分的相对排序。

    有没有更好的解决方案?

1 个答案:

答案 0 :(得分:4)

  1. 比较前两个点的Y轴以确定线是否是垂直的。 (O(1))
  2. 如果是垂直,按Y轴排序(O(nlogn))
  3. 如果不是垂直的,则按X轴排序(O(nlogn))
  4. 要查找相邻点,请通过二分搜索(O(logn))在排序列表中查找点,并获取上一个和下一个点。