2016-06-02 4 views
0

У меня есть изоповерхностные данные в MATLAB. Например:Удаление вершины из изоплоскости 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]; 

Как я могу удалить это множество вершин из сетки и обновить список граней соответственно? Я хотел бы, чтобы топологическая структура сетки оставалась прежней (т. Е. Удаленные грани должны быть заменены лицами, которые не проходят через удаленные вершины).

Спасибо!

ответ

1

Проще всего сделать (если вы хотите отобразить сетку) просто установить их значение в 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; 
+0

Благодарим за ваш ответ! Есть еще одна проблема, о которой я раньше не знал (я обновил свой вопрос соответственно): я бы хотел, чтобы топология структуры осталась прежней (т. Е. Я не хочу создавать дыры в сетке из-за удаления вершины). Вы знаете, как я могу заполнить созданную дыру? – drorco

+0

@ drorco Насколько я знаю, это довольно некорректная проблема. Вероятно, вам нужно будет удалить точку и повторно соединить ваши данные. – Suever

+0

и как я могу переделать данные? есть ли для него функция? – drorco