No such thing as a small change PerlMonks

Re: reordering segments to form a polygon

by borisz (Canon)
 on Aug 13, 2004 at 09:44 UTC ( #382592=note: print w/replies, xml ) Need Help??

in reply to reordering segments to form a polygon

```use Data::Dumper;
my @r = (
[ 5, 3, 5, 5 ],
[ 1, 1, 2, 1 ],
[ 2, 1, 2, 3 ],
[ 5, 5, 1, 5 ],
[ 1, 5, 1, 1 ],
[ 2, 3, 5, 3 ]
);
@x =  sort { \$a->[2] <=> \$b->[0] || \$a->[3] <=> \$b->[1] || -1 } @r;
print Dumper(\@x);
__OUTPUT__
[ 1, 5, 1, 1 ]
[ 1, 1, 2, 1 ]
[ 2, 1, 2, 3 ]
[ 2, 3, 5, 3 ]
[ 5, 3, 5, 5 ]
[ 5, 5, 1, 5 ]
Update: As Jaap found out, it did not work always, so here is my next try:
```for my \$i (0..\$#r) {
my \$p = \$i + 1;
for my \$j (\$p .. \$#r) {
next unless \$r[\$i]->[2] == \$r[\$j]->[0]
&& \$r[\$i]->[3] == \$r[\$j]->[1];
@r[\$p, \$j] = @r[\$j, \$p];
last;
}
}
Boris

Replies are listed 'Best First'.
Re^2: reordering segments to form a polygon
by Jaap (Curate) on Aug 13, 2004 at 10:37 UTC
Although VERY beautiful, it is incorrect:
```#!/cadappl/bin/perl -w -Ilib

use strict;

my @r = (
[ 5, 3, 5, 5 ],
[ 1, 1, 2, 1 ],
[ 2, 3, 5, 3 ],
[ 5, 5, 1, 5 ],
[ 2, 1, 2, 3 ],
[ 1, 5, 1, 1 ],
);
my @x = sort { \$a->[2] <=> \$b->[0] || \$a->[3] <=> \$b->[1] || -1 } @r;
foreach (@x)
{
print "\$_->[0],\$_->[1],\$_->[2],\$_->[3]\n";
}
Output:
```1,5,1,1
1,1,2,1
2,1,2,3
5,5,1,5
2,3,5,3
5,3,5,5
I changed the order of @r to show the error.

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://382592]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2022-12-09 23:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?