我有一个由 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)。
我怎样才能快速做到这一点?
我有一个由 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)。
我怎样才能快速做到这一点?
假设坐标(除了感兴趣的坐标)位于 X (1 xn) 和 Y (1 xn) 中。
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))
检查它是否有效...
@Oliver:我相信它不会起作用,因为你可以让所有邻居都在围绕有趣点的同一四分之一圈内。
在我看来,更好的解决方案应该是将每个感兴趣点周围的区域划分为 4 个区域(在 dX 正、dX 负、dY 正和 dY 负(dX、dY 对的 4 种组合)方面不同。在每个区域中,它是需要找到最小的欧几里得差异。