http://qs1969.pair.com?node_id=382678


in reply to reordering segments to form a polygon

Slight variations on what other have done. This dies if your polygon is not closed.
#!/usr/bin/perl use strict; my @seg = ( [ 1, 1, 2, 1 ], [ 5, 5, 1, 5 ], [ 2, 3, 5, 3 ], [ 5, 3, 5, 5 ], [ 2, 1, 2, 3 ], [ 1, 5, 1, 1 ]); my %starts=map{"@$_[0,1]",$_} @seg; my @sorted_segs = my $cur = $seg[0]; while (1) { my $next = $starts{"@$cur[2,3]"}; die "your polygon is broken\n" if !$next; $next==$seg[0] ? last : push @sorted_segs,$next; $cur = $next; } print "@$_\n" for @sorted_segs;