Faces from a mesh: Difference between revisions

Content added Content deleted
(→‎{{header|Go}}: No need for 'names' slice.)
Line 414: Line 414:
<lang zkl>fcn perimSame(p1, p2){
<lang zkl>fcn perimSame(p1, p2){
if(p1.len() != p2.len()) return(False);
if(p1.len() != p2.len()) return(False);
foreach p in (p1){ if(not p2.holds(p)) return(False) }
False == p1.filter1('wrap(p){ (not p2.holds(p)) })
True
}
}


Line 422: Line 421:
p,last := ( if(edges) edges.pop(0).copy() else T ), ( p and p[-1] or Void );
p,last := ( if(edges) edges.pop(0).copy() else T ), ( p and p[-1] or Void );
while(edges){
while(edges){
foreach n, ij in ([0..].zip(edges)){
foreach i,j in (edges){
if (i==last){ p.append( last=j ); edges.del(__iWalker.idx); break; }
i,j := ij;
if(i==last) { p.append(j); last=j; edges.pop(n); break; }
else if(j==last){ p.append( last=i ); edges.del(__iWalker.idx); break; }
else if(j==last){ p.append(i); last=i; edges.pop(n); break; }
}
}
fallthrough{ return(">>>Error! Invalid edge format<<<") }
fallthrough{ return(">>>Error! Invalid edge format<<<") }
}
}
p[0,-1]
p[0,-1] // last element not part of result
}</lang>
}</lang>
<lang zkl>println("Perimeter format equality checks:");
<lang zkl>println("Perimeter format equality checks:");