在X-Y平面中找到2点

时间:2019-05-08 05:08:35

标签: c++ geometry line computational-geometry cartesian-coordinates

我有X-Y平面和点(xi,yi),其中x,y和i是整数。现在,如果我绘制斜率1和-1的无限线,我必须找到那两个将位于同一条线上的点,或者如果它们都不位于那条线,则应该输出:

情况:如果线上至少有1个点,则第2个点应该是与该线的距离最小的点。在这种情况下,我们可以精确地在这两个点之间画线,以最小化距离。

我找不到解决此问题的方法。我的方法是查看相反象限中的点,但没有比O(n ^ 2)更好的解决方案。

1 个答案:

答案 0 :(得分:1)

首先,我将这些点转换为旋转45°的不同坐标系:

u = x + y
v = x - y

如果原始点位于斜率为1的线上,则其v坐标将相等。如果它们位于斜率为-1的线上,则它们的u坐标将相等。

现在,创建两个点列表。一个按u排序,另一个按v排序。然后迭代所有要点。要查找最接近相应线的点,只需按排序顺序检查相邻点。如果邻居具有相同的u / v坐标,就可以完成。如果不是,请找出差异最小的u / v邻居,并记住它。对所有点进行此操作,并报告距离最小的那对。