我在2D中有一条曲线穿过我的网格。随着时间的推移,它正在向前迈进。我在这条曲线(前面)和网格上的节点上有一组点。在每个时间步骤我需要找到曲线上的哪个点(前面)最接近我的网格上的节点。换句话说,对于我的网格中的每个节点,我想知道曲线上的哪个点最接近它。是否有内置的MATLAB函数来搜索它? (我正在使用MATLAB环境)
在图中,问题是哪一个是与任何黄色方块最接近的黑色圆圈。
答案 0 :(得分:2)
Here是计算成对距离的有效函数:
function D = sqDistance(X, Y)
D = bsxfun(@plus,dot(X,X,1)',dot(Y,Y,1))-2*(X'*Y);
end
假设circles
是黑色圆圈的坐标,squares
是您描述的黄色方块的坐标,您可以执行以下操作:
% example matrices
circles = rand(5,2);
squares = rand(8,2);
D = sqDistance(squares', circles');
[~,idx] = sort(D, 2)
closest_points = circles(idx(:,1),:)
closest_points
与squares
具有相同的尺寸,并存储每个黄色方块的最近圆的坐标。