我有X-Y平面和点(xi,yi),其中x,y和i是整数。现在,如果我绘制斜率1和-1的无限线,我必须找到那两个将位于同一条线上的点,或者如果它们都不位于那条线,则应该输出:
情况:如果线上至少有1个点,则第2个点应该是与该线的距离最小的点。在这种情况下,我们可以精确地在这两个点之间画线,以最小化距离。
我找不到解决此问题的方法。我的方法是查看相反象限中的点,但没有比O(n ^ 2)更好的解决方案。
答案 0 :(得分:1)
首先,我将这些点转换为旋转45°的不同坐标系:
u = x + y
v = x - y
如果原始点位于斜率为1的线上,则其v
坐标将相等。如果它们位于斜率为-1的线上,则它们的u
坐标将相等。
现在,创建两个点列表。一个按u
排序,另一个按v
排序。然后迭代所有要点。要查找最接近相应线的点,只需按排序顺序检查相邻点。如果邻居具有相同的u
/ v
坐标,就可以完成。如果不是,请找出差异最小的u
/ v
邻居,并记住它。对所有点进行此操作,并报告距离最小的那对。