使用 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 , :))
我有一个包含曲面顶点的矩阵 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 , :))