my %end_point;
# First, scan the list for all start points:
foreach my $line (@seg) {
my $start = join "|", $line->[0], $line->[1];
my $end = join "|", $line->[2], $line->[3];
die "Point ($start) has more than one line starting at it: ($start) -> ($end_point{$start}) and ($start) -> ($end)"
if $start_point{$start};
$end_point{$start} = $end;
};
# Now, jut select an arbitrary point, and trace our
# polygon. If there are keys left after the target
# of our current point does not exist anymore, the list
# of points does not describe one closed polygon
my $start = join "|", $seq[0]->[0], $seq[0]->[1];
my $cur = $start;
while (exists $end_point{$cur}) {
print "($cur) -> $end_point{$cur}\n";
$cur = delete $end_point{$cur};
};
if (keys %end_point) {
warn "The list did not describe one closed polygon:\n";
warn "Started at ($start), got to ($cur)\n";
warn "Left over vertices:\n";
warn "$_ -> $end_point{$_}\n"
for (keys %end_point);
die "Error in polygon list";
};