?? gmcompo.m
字號:
function rlabel = gmcompo(mesh);% gmcompo: find connected components of a mesh% returns an array (zba) holding labels, one label per% node.% use an n*alpha(n) union-find algorithm.gdim = double(mesh{1});di = double(mesh{2});[scrap,numnode] = size(mesh{4});parent = zba((0:(numnode-1))');lsize = zba(ones(numnode,1));tmplist = zeros(numnode,1);[scrap,numelt] = size(mesh{5});for snum = 0 : numelt - 1 for whichnode = 0 : gdim - 1 v = zeros(2,1); v(1) = double(mesh{5}(whichnode + 1, snum)); v(2) = double(mesh{5}(whichnode + 2, snum)); label = zeros(2,1); %% look up labels of v(1) and v(2) %% use path compression. for whichend = 1 : 2 j1 = v(whichend); p = double(parent(j1)); tmplistsize = 1; tmplist(1) = j1; while p ~= j1 tmplistsize = tmplistsize + 1; tmplist(tmplistsize) = p; j1 = p; p = double(parent(p)); end for i = 1 : tmplistsize parent(tmplist(i)) = p; end label(whichend) = double(p); end if label(1) ~= label(2) % merge labels 1 and 2 if lsize(label(1)) >= lsize(label(2)) largerc = label(1); smallerc = label(2); else largerc = label(2); smallerc = label(1); end parent(smallerc) = largerc; lsize(largerc) = lsize(largerc) + lsize(smallerc); lsize(smallerc) = 0; end endend%% Now renumber the active labels.renumlabel = cumsum(lsize > 0) - ones(numnode,1);rlabel = zba(zeros(numnode,1));for vnum = 0 : numnode - 1 % Get the label of node vnum. Apply path compression j1 = vnum; p = double(parent(j1)); tmplistsize = 1; tmplist(1) = j1; while p ~= j1 tmplistsize = tmplistsize + 1; tmplist(tmplistsize) = p; j1 = p; p = double(parent(p)); end for i = 1 : tmplistsize parent(tmplist(i)) = p; end rlabel(vnum) = renumlabel(p);end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -