2016-02-18 4 views
0

enter image description hereНайти точку на кривой, которая находится ближе всего к данной точке

У меня есть кривая Прорубание моей сетки в 2D. С течением времени это движение вперед. У меня есть множество точек на этой кривой (фронт) и мои узлы на сетке. На каждом временном шаге мне нужно найти, какая точка на кривой (фронт) ближе всего к узлам моей сетки. Другими словами, для каждого узла в моей сетке я хотел бы знать, какая точка на кривой ближе всего к ней. Есть ли встроенная функция MATLAB для поиска этого? (Я использую среду MATLAB)

На рисунке будет вопрос, какой из них является ближайшим черным кругом к любому из желтых квадратов.

+0

Можете ли вы привести примерный код, чтобы мы знали, как выглядят ваши переменные? – Lisa

+0

@ Lisa, я в основном имею координаты матрицы черных кругов (nX2) и координат матрицы желтых квадратов (mX2). В конце я ожидаю получить матрицу размера (mX2), которая содержит для каждого желтого квадрата (m из них) координаты ближайшего черного круга (1X2). – Noname

ответ

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, и сохраняет координаты ближайшего круга для каждого желтого квадрата.

+0

благодарит много работы отлично. Я также нашел эту встроенную функцию в MATLAB ** [k, d] = dsearchn (PInterface, X) **, которая дает расстояние d и индекс ближайшего круга k :) – Noname

 Смежные вопросы

  • Нет связанных вопросов^_^