找到曲线上最接近给定点的点

Find the point on a curve which is closest to a given point

我有一条曲线穿过我的 2D 网格。随着时间的推移,它正在走向前沿。我在这条曲线(前面)上有一组点,在网格上有我的节点。在每个时间步,我需要找到曲线(前面)上的哪个点最接近我的网格上的节点。换句话说,对于我的网格中的每个节点,我想知道曲线上的哪个点最接近它。是否有内置的 MATLAB 函数来搜索这个? (我使用的是MATLAB环境)

图中的问题是哪个黑色圆圈最接近黄色方块。

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_pointssquares 具有相同的维度,并存储每个黄色方块的最近圆的坐标。