从 Matlab 的等值面中删除顶点
Removing a vertex from Matlab's isosurface
我在 MATLAB 中有一个等值面数据。例如:
[x,y,z,v] = flow;
FV = isosurface(x,y,z,v);
FV =
vertices: [4208x3 double]
faces: [8192x3 double]
我还有一个要删除的顶点索引列表:
verticesToRemove = [1183, 1852, 2219, 1925, 3684];
如何从网格中删除这些顶点集并相应地更新面列表?
我希望网格的拓扑结构保持不变(即删除的面需要用不经过删除顶点的面替换)。
谢谢!
最简单的事情(如果你只想显示网格)就是简单地将它们的值设置为 NaN
,然后你就不必更新你的 Faces
矩阵和所有使用这些顶点的面将在渲染过程中被忽略。
FV.vertices(verticesToRemove,:) = NaN;
如果您确实想更新要在别处使用的结构,您可以重新计算面。删除顶点后。
% Remove the vertex values at the specified index values
newVertices = FV.vertices;
newVertices(verticesToRemove,:) = [];
% Find the new index for each of the new vertices
[~, newVertexIndex] = ismember(FV.vertices, newVertices, 'rows');
% Find any faces that used the vertices that we removed and remove them
newFaces = FV.faces(all(FV.faces ~= verticesToRemove, 2),:);
% Now update the vertex indices to the new ones
newFaces = newVertexIndex(newFaces);
FV.vertices = newVertices;
FV.faces = newFaces;
我在使用上述解决方案时遇到了一些问题,但仍想从我的面和顶点中清除 nan
值以节省一些内存和时间:
for i = length(FV.vertices):-1:1
if any(isnan(FV.vertices(i,:)))
FV.faces(any(FV.faces==i,2), :) = []; % remove faces
FV.vertices(i,:) = []; % remove vertices
FV.faces(FV.faces>i) = FV.faces(FV.faces>i)-1; % slide indices
end
end
我在 MATLAB 中有一个等值面数据。例如:
[x,y,z,v] = flow;
FV = isosurface(x,y,z,v);
FV =
vertices: [4208x3 double]
faces: [8192x3 double]
我还有一个要删除的顶点索引列表:
verticesToRemove = [1183, 1852, 2219, 1925, 3684];
如何从网格中删除这些顶点集并相应地更新面列表? 我希望网格的拓扑结构保持不变(即删除的面需要用不经过删除顶点的面替换)。
谢谢!
最简单的事情(如果你只想显示网格)就是简单地将它们的值设置为 NaN
,然后你就不必更新你的 Faces
矩阵和所有使用这些顶点的面将在渲染过程中被忽略。
FV.vertices(verticesToRemove,:) = NaN;
如果您确实想更新要在别处使用的结构,您可以重新计算面。删除顶点后。
% Remove the vertex values at the specified index values
newVertices = FV.vertices;
newVertices(verticesToRemove,:) = [];
% Find the new index for each of the new vertices
[~, newVertexIndex] = ismember(FV.vertices, newVertices, 'rows');
% Find any faces that used the vertices that we removed and remove them
newFaces = FV.faces(all(FV.faces ~= verticesToRemove, 2),:);
% Now update the vertex indices to the new ones
newFaces = newVertexIndex(newFaces);
FV.vertices = newVertices;
FV.faces = newFaces;
我在使用上述解决方案时遇到了一些问题,但仍想从我的面和顶点中清除 nan
值以节省一些内存和时间:
for i = length(FV.vertices):-1:1
if any(isnan(FV.vertices(i,:)))
FV.faces(any(FV.faces==i,2), :) = []; % remove faces
FV.vertices(i,:) = []; % remove vertices
FV.faces(FV.faces>i) = FV.faces(FV.faces>i)-1; % slide indices
end
end