2011-03-07 155 views
0

我在网格上有一个点(以下称为原点),例如,[3, 3]获得距离点最近的坐标

我也有一组点与原始点位于同一水平线和垂直线上,例如[[3,1],[3,2],[3,4],[7,3],[8,3]]

我想要一个返回最多四个点的函数:在每个方向(即左,右,上,下)最接近原点的点。通过上面的例子中,它会返回,

[[3,2],[3,4],[7,3]] 

因为[3,2]是左边的最近点,[3,4]是右边的最近点,[7,3]是最接近点以上,并有以下不得分。 (方向顺序并不重要)

有没有一种优雅和合理简洁的方式来做到这一点,使用Javascript/JQuery?

+0

不会[3,1]成为最接近的点吗? – Ronald 2011-03-07 03:37:30

+0

不,[3,2]比[3,1]更接近[3,3]。 – 2011-03-07 03:41:25

+0

输入是否总是按照你的例子排序? – rahulmohan 2011-03-07 08:20:14

回答

2

我不知道JavaScript,但下面的算法会非常简单,如果你可以用JavaScript来制定它。

(X0, Y0)为原点。

迭代通过阵列,[(X1, Y1), ..., (XN, YN)],并保持帐户的

R =僖最小值的 - X0> 0

L = X0 - 僖> 0

随着你的进行。 在迭代结束时,这些值为您提供最近的点,即X0 + RX0 - L

对点的垂直线做类似的迭代。