我创建了由限制xmin=-2
,xmax=2
,ymin=-2
,ymax=2
和解决方案0.25
定义的网格:
[X,Y] = meshgrid(-2:.25:2, -2:.25:2);
我需要找到距x=0.9
,y=1.1
最近的点,其中包含一个适用于任何坐标的函数。
答案 0 :(得分:1)
以下代码计算所有距离并找到最小化距离的网格点。即使网格没有恒定的间距,它也能工作。
data-toggle="collapse" data-parent="NameOfMyParent"
答案 1 :(得分:1)
对于均匀间距的网格,您可以通过O(1)
中的直接计算而不是整个网格的O(m*n)
搜索来找到这一点。我已将xres
和yres
分开以获得灵活性,但您当然可以合并它们:
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并遍历网格中的所有点。 不是超级高效,而是它的工作。