在网格上找到最近的(x,y)坐标点(MATLAB)

时间:2015-09-09 14:06:41

标签: arrays matlab

我创建了由限制xmin=-2xmax=2ymin=-2ymax=2和解决方案0.25定义的网格:

[X,Y] = meshgrid(-2:.25:2, -2:.25:2);

我需要找到距x=0.9y=1.1最近的点,其中包含一个适用于任何坐标的函数。

3 个答案:

答案 0 :(得分:1)

以下代码计算所有距离并找到最小化距离的网格点。即使网格没有恒定的间距,它也能工作。

data-toggle="collapse" data-parent="NameOfMyParent"

答案 1 :(得分:1)

对于均匀间距的网格,您可以通过O(1)中的直接计算而不是整个网格的O(m*n)搜索来找到这一点。我已将xresyres分开以获得灵活性,但您当然可以合并它们:

function [u, v] = getgrid(x, y, xmin, xmax, xres, ymin, ymax, yres)

   %// Find how many grid points we are from the center
   u=round(x/xres);     
   v=round(y/yres);

   %// Add the center point of grid to each offset
   u=u+(-xmin/xres)+mod(1+(xmax-xmin)/xres,2);
   v=v+(-ymin/yres)+mod(1+(ymax-ymin)/yres,2);

end

这是我编写的用于驱动该功能的测试脚本:

xmin=-2; xmax=2; ymin=-2; ymax=2; res=0.25;
[X,Y] = meshgrid(xmin:xres:xmax, ymin:yres:ymax);

x=0.9
y=1.1
[u v]=getgrid(x, y, xmin, xmax, res, ymin, ymax, res)

[X(v,u), Y(v,u)]

x=-0.7
y=1.6
[u v]=getgrid(x, y, xmin, xmax, res, ymin, ymax, res)

[X(v,u), Y(v,u)]

输出......

>> gogrid
x =  0.90000
y =  1.1000
u =  13
v =  13
ans =

   1   1

x = -0.70000
y =  1.6000
u =  6
v =  15
ans =

  -0.75000   1.50000

答案 2 :(得分:0)

如果网格的大小不是太大,您可以随时计算到每个点的距离并找到最小值。

您将距离定义为d =(x-x0)^ 2 +(y-y0)^ 2并遍历网格中的所有点。 不是超级高效,而是它的工作。