% first solution: % define line segments n=[ 0 5 8 10 0 3 7 9 0 2 4 6 0 1 1 1 1 6 9 10 1 4 7 8 1 2 3 5 1 0 0 0 ]; % compute triangles t=[]; tic; for i=1:2 ix=1+(i-1)*4; for j=2:size(n,2) p=nchoosek(n(ix:ix+3,j),2); t=[t;n(ix,1)*ones(size(p,1),1) p]; end end t=sort(t,2); t=unique(t,'rows'); toc t size(t,1) % generalized solution % create connection matrix % ...nr of line segments (OP: 3) clear all; % save old stuff! ns=3; % ...base corners are <0/1>, hence tic; n1=reshape(1:ns.^2,ns,ns).'+1; n1=[[zeros(ns,1) n1];[0 1*ones(1,ns)]]; n2=fliplr(n1.'); n2(1,1)=1; n=[n1;n2] % compute triangles t=[]; for i=1:2 ix=1+(i-1)*(ns+1); for j=2:size(n,2) p=nchoosek(n(ix:ix+ns,j),ns-1); t=[t;n(ix,1)*ones(size(p,1),1) p]; end end t=sort(t,2); t=unique(t,'rows'); toc t size(t,1)