% get connected eles for every ele % check down, right, up, left connected eles function connectEle = checkConnectEle(eles,nodes,eleNum,optNeighbor) if optNeighbor==4 % down, right, up, left connectEle = zeros(eleNum,4); % max connect ele = 4 for i = 1:eleNum node = eles(i,:); tempEles = eles; tempEles(i,:) = 0; connectEle(i,1) = connectThisEle(node(1),node(2),tempEles); connectEle(i,2) = connectThisEle(node(3),node(2),tempEles); connectEle(i,3) = connectThisEle(node(3),node(4),tempEles); connectEle(i,4) = connectThisEle(node(1),node(4),tempEles); end else % 8 dir: % down, right, up, left, down-left, down-right, up-right, up-left connectEle = mooreNeighbor(eles,nodes,eleNum); end end % get connected eles for edge(node1,node2) function ce = connectThisEle(node1,node2,eles) ce = 0; % no connected ele compn(:,:,1) = repmat(node1,size(eles)); compn(:,:,2) = repmat(node2,size(eles)); compe = repmat(eles,[1,1,2]); ifcom = compn==compe; com = sum(sum(ifcom,3),2); % sum by 3rd dim, by 2nd dim(cols) if find(com>1) [ce,~] = find(com>1); end end function ce = connectThisNode(node,eles) ce = 0; compn = repmat(node,size(eles)); ifcom = compn==eles; com = sum(ifcom,2); if find(com>0) [ce,~] = find(com>0); end end % get surronding 8 neighbor eles % down, right, up, left, down-left, down-right, up-right, up-left function [connectEle] = mooreNeighbor(eles,nodes,eleNum) connectEle = zeros(eleNum,8); % max connect ele = 8 for i = 1:eleNum node = eles(i,:); tempEles = eles; tempEles(i,:) = 0; conn = zeros(3*4, 1); for j = 1:4 ce = connectThisNode(node(j),tempEles); conn((j-1)*3+1:(j-1)*3+size(ce),1) = ce; end conn = setdiff(unique(conn),0); % the center coordinate of this ele nodesIdx = eles(i,:); nodesCoor = nodes(nodesIdx,1:2); coori = mean(nodesCoor); % decide the dir by the center coordinate of connected ele connNum = size(conn); for j = 1:connNum nodesIdx = eles(conn(j),:); nodesCoor = nodes(nodesIdx,1:2); coorj = mean(nodesCoor); % the center coordinate if abs(coorj(1)-coori(1))<1e-5 if coorj(2)-coori(2)>1e-5 connectEle(i, 3) = conn(j); % up else connectEle(i, 1) = conn(j); % down end elseif abs(coorj(2)-coori(2))<1e-5 if coorj(1)-coori(1)>1e-5 connectEle(i, 2) = conn(j); % right else connectEle(i, 4) = conn(j); % left end elseif coorj(1)-coori(1)>1e-5 && coorj(2)-coori(2)>1e-5 connectEle(i, 7) = conn(j); % up-right elseif coori(1)-coorj(1)>1e-5 && coorj(2)-coori(2)>1e-5 connectEle(i, 8) = conn(j); % up-left elseif coori(1)-coorj(1)>1e-5 && coori(2)-coorj(2)>1e-5 connectEle(i, 5) = conn(j); % down-left elseif coorj(1)-coori(1)>1e-5 && coori(2)-coorj(2)>1e-5 connectEle(i, 6) = conn(j); % down-right end end end end