我有m个属性的n元素数组。 id1 x1 y1 id2 x2 y2 ... idn xn yn
我有一个坐标(x,y),我想找到(x,y)左边,上边,下边和下边的所有元素的id,这意味着 (x-1,y),(x,y + 1),(x + 1,y),(x,y-1)。
我怎样才能快速完成这项工作?
答案 0 :(得分:0)
假设坐标(感兴趣的坐标除外)位于X(1 x n)和Y(1 x n)中。
1 - 计算到所有坐标的欧几里德距离:
D = sqrt((X - x).^2 + (Y - y).^2));
2 - 对距离矢量D进行排序,找到欧几里德距离最小的4个坐标
[M idx] = sort(D);
3-获取最近点的坐标
X(idx(1:4))
Y(idx(1:4))
检查它是否有效......
答案 1 :(得分:0)
@Oliver: 我相信它不会起作用,因为你让所有的邻居都围绕着这个有趣点的同一个圆圈。
在我看来,更好的解决方案应该是将每个有趣点周围的区域划分为4个区域(dX阳性,dX阴性,dY阳性和dY阴性(dX,dY夫妇的4种组合)不同)。区域需要找到最小的欧几里德差异。