Suppose T is a triangular mesh, f is the face list, v is the vertex list;
For some vertex k, I have the info of its neighboring faces va, which is an index into f.
fva = f(va,:) is length(va) by 3 matrix about vertices involved in va, and k is present in every row of fva.
I want to re-arrange columns in fva, row by row, so that vertex k is always in the first column, while the rotation order of vertices (clockwise,cc) is retained for each row.
% Set up the data;
load seamount;
v = [x,y,z];
f = delaunay(x,y);
k = 10;
va = find(any(f == 10,2));
fva = f(va,:);
A1: straightforward for-loop solution;
for c = 1:length(va)A2:
if fva(c,2) == k, fva(c,:) = fva(c,[2 3 1]); end
if fva(c,3) == k, fva(c,:) = fva(c,[3 1 2]); end
end
fvaT = fva.';[ii,~] = find(fvaT == 10);cOrder = [1 2 3; 2 3 1; 3 1 2];fva = fvaT(bsxfun(@plus,cOrder(:,ii),(0:3:numel(ii)*3-3))).';
Generally A1 is faster than A2;
No comments:
Post a Comment