Использование функции поиска Matlab для получения индекса вершины по ее координатам - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть матрица 50943x3, которая содержит вершины поверхностной сетки. Я хочу найти индекс определенной вершины, используя ее координаты (x, y, z).

Я пытался найти функцию Matlab, ноон возвращает пустую матрицу 0 на 1.

Заранее спасибо,

Приветствия

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Ваша попытка, вероятно, не работает из-за ошибок округления с плавающей запятой.Вы можете прочитать больше об этом здесь .Вы можете посмотреть на eps функцию или просто использовать этот пример:

% Your matrix
M = randn(50943 , 3);

% The coordinates you are looking for
P = [0,0,0];

% Distance between all coordinates and target point
D = sqrt(sum((M - bsxfun(@minus,M,P)).^2,2));

% Closest coordinates to target
[~ , pos] = min(D);

% Display result
disp(M(pos , :))
0 голосов
/ 19 ноября 2018

Попробуйте следующее:

mat = randi(30,50943,3);
vec = [1,2,3];
% R2106b+ code
ind = find(all(mat==vec,2));
% or: explicit expansion, works with all versions
ind = find(all(bsxfun(@eq,mat,vec),2));

Что это делает: == или eq проверит, равны ли координаты (дает матрицу [50943x3] bool) all вернет истину, только если все координаты равны find возвращает индекс всех ненулевых элементов

Это работает только для точного соответствия (отсюда целочисленные координаты, выбранные с помощью randi).


Поскольку ответ уже принят, я добавлю ответ @Zep, который предоставит решение для получения ближайшей точки, которая, по-видимому, и была тем, что первоначально искали.

[min_dist,ind_nearest] = min(sum(bsxfun(@minus,mat,vec).^2,2)); % index to the nearest point
...