使用 Matlab 查找函数使用其坐标获取顶点的索引

Use of Matlab find function for getting index of a vertex using its coordinates

我有一个包含曲面顶点的矩阵 50943x3 mesh.I 想使用坐标 (x,y,z) 查找某个顶点的索引。

我尝试了 Matlab 函数 find,但它 return 是一个 0×1 的空矩阵。

提前致谢,

干杯

尝试以下操作:

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] 布尔矩阵) all 只有在所有坐标都相等时才会 return 为真 find returns 所有非零元素的索引

这仅适用于完全匹配(因此使用 randi 选择整数坐标)。


既然答案已经被接受,我将添加@Zep答案,它提供了一个获得最近点的解决方案,这似乎是最初寻求的。

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

由于浮点舍入错误,您的尝试可能无效。您可以阅读更多相关信息 here. You could look into the the eps function,或者仅使用此示例:

% 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 , :))